Board logo

標題: [jQuery] date picker plugin - jQuery 月曆 [打印本頁]

作者: wmh    時間: 2008-6-1 14:56     標題: [jQuery] date picker plugin - jQuery 月曆

jQuery date picker plugin v2
http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/
實用的月曆 plugin,網頁表單必備工具!

這個月曆除了需要使用 jQuery 之外,還需要一個 date.js,此外,如果在 IE6 使用時,需要避免被下拉選單覆蓋住,直接引用 bgiframe plugin 即可自動處理。先看看一個簡單的範例:

[jsg.example]
<input type="text" name="date1" id="date1" class="date-pick" />
<link rel="stylesheet" type="text/css" href="_lib/jquery/plugins/jquery.datePicker.css" />  
<style type="text/css">
a.dp-choose-date {
float: left;
width: 16px;
height: 16px;
padding: 0;
margin: 5px 3px 0;
display: block;
text-indent: -2000px;
overflow: hidden;
background: url(_lib/jquery/plugins/date_16x16.gif) no-repeat;
}
a.dp-choose-date.dp-disabled {
background-position: 0 -20px;
cursor: default;
}
input.dp-applied {
width: 100px;
float: left;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2/jquery.min.js"></script>
<script type="text/javascript" src="_lib/jquery/plugins/date.js"></script>
<script type="text/javascript" src="_lib/jquery/plugins/jquery.datePicker.js"></script>
<script type="text/javascript">
$j = jQuery.noConflict();
$j(function() {
  Date.format = 'yyyy-mm-dd';
  $j('#date1').datePicker();
});
</script>
[/jsg.example]

HTML 和 CSS 的原始碼如下:
<input type="text" name="date1" id="date1" class="date-pick" />
<link rel="stylesheet" type="text/css" href="datePicker.css" />  
<style type="text/css">
a.dp-choose-date {
  float: left;
  width: 16px;
  height: 16px;
  padding: 0;
  margin: 5px 3px 0;
  display: block;
  text-indent: -2000px;
  overflow: hidden;
  background: url(date_16x16.gif) no-repeat;
}
a.dp-choose-date.dp-disabled {
  background-position: 0 -20px;
  cursor: default;
}
input.dp-applied {
  width: 100px;
  float: left;
}
</style>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript" src="jquery.datePicker.js"></script>
JavaScript 的部份則是先透過 jQuery 取得要輸入日期的 <input> Tag,然後套用 datePicker() 即可。這個範例中還把日期的格式修改為 yyyy-mm-dd,比較符合台灣地區的使用習慣:
$(function() {
  Date.format = 'yyyy-mm-dd';
  $('#date1').datePicker();
});
date picker 預設可輸入的日期為今天以後,如果要讓使用者輸入以前的日期,則需要額外指定 startDate 這個參數:
$(function() {
  $('#date2').datePicker({startDate:'1996-01-01'});
});
範例:

[jsg.example]
<input type="text" name="date2" id="date2" class="date-pick" />
<script type="text/javascript">
$j(function() {
  $j('#date2').datePicker({startDate:'1996-01-01'});
});
</script>
[/jsg.example]


以上簡單地示範了 date picker 的用法,其實 date picker 還提供了更多的參數以及自訂事件可供設定或使用,詳情請參考官方網站有更多的說明。
作者: hanmin888    時間: 2008-12-12 16:56     標題: 請問一下使用方法

如題
我照著上述方式來做
但是卻沒有 那個小圖 可以點選
也就是只有 text 而已 ,沒有旁邊的小圖可以點出來選月曆
我的程式碼如下,請指正,謝謝.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>月曆測試</title>
<!--JavaScript-->
<script type="text/javascript" src="jquery.datePicker-2.1.1.js"></script>   
<script type="text/javascript" src="http://jqueryjs.googlecode.com/svn/trunk/plugins/datePicker/v2/demo/date.js"></script>   
<script type="text/javascript" src="jquery.datePicker.min-2.1.1.js"></script>
<script type="text/javascript">
$(function() {   
  Date.format = 'yyyy-mm-dd';   
  $('#date1').datePicker();   
}); 
</script>  
<!--JavaScript--> 
<!--CSS--> 
<link rel="stylesheet" type="text/css" href="datePicker.css" />
<style type="text/css">   
a.dp-choose-date {   
  float: left;   
  width: 16px;   
  height: 16px;   
  padding: 0;   
  margin: 5px 3px 0;   
  display: block;   
  text-indent: -2000px;   
  overflow: hidden;   
  background: url(date_16x16.gif) no-repeat;   
}   
a.dp-choose-date.dp-disabled {   
  background-position: 0 -20px;   
  cursor: default;   
}   
input.dp-applied {   
  width: 100px;   
  float: left;   
}   
</style>  
<!--CSS--> 
</head>
<body>
<input type="text" name="date" id="data1" class="date-pick">

</body>
</html>

作者: hanmin888    時間: 2008-12-12 17:19     標題: 我想我找到原因了

原因應該是 date1 打錯了...囧



[ 本帖最後由 hanmin888 於 2008-12-12 22:50 編輯 ]
作者: wmh    時間: 2008-12-12 20:22

好像不是耶,我看了一下你的程式,首先 jquery 沒有載入喔,另外 id 似乎打錯了,我改成這樣就可以了:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2/jquery.min.js"></script>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/svn/trunk/plugins/datePicker/v2/demo/date.js"></script>
<script type="text/javascript" src="jquery.datePicker.js"></script>
<script type="text/javascript">
$(function() {
  Date.format = 'yyyy-mm-dd';
  $('#date1').datePicker();  //這邊是 date1
});
</script>
...
<!-- 這邊也要改成 date1 -->
<input type="text" name="date" id="date1" class="date-pick">  

作者: hanmin888    時間: 2008-12-12 23:04     標題: 還是不行


奇怪了, 還是不行耶...可能是js都沒載入吧...但又看不出哪裡錯..
這次我是照JQuery的官網demo試...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
<html>   
<head>   
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">   
<title>月曆測試</title>   
<!--JavaScript-->   
<script type="text/javascript" src="jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="jquery.datePicker-2.1.1.js"> </script>
<script type="text/javascript" src="date.js"></script>      
<script type="text/javascript">   
$(function() {      
  Date.format = 'yyyy-mm-dd';      
  $('#date1').datePicker();      
});    
</script>     
<!--JavaScript-->    
<!--CSS-->    
<link rel="stylesheet" type="text/css" href="datePicker.css" />   
<style type="text/css">      
a.dp-choose-date {      
  float: left;      
  width: 16px;      
  height: 16px;      
  padding: 0;      
  margin: 5px 3px 0;      
  display: block;      
  text-indent: -2000px;      
  overflow: hidden;      
  background: url(date_16x16.gif) no-repeat;      
}      
a.dp-choose-date.dp-disabled {      
  background-position: 0 -20px;      
  cursor: default;      
}      
input.dp-applied {      
  width: 100px;      
  float: left;      
}      
</style>     
<!--CSS-->    
</head>   
<body>   
<input type="text" name="date" id="date1" class="date-pick">   
  
</body>   
</html> 

作者: wmh    時間: 2008-12-12 23:32

剛剛試過你的這段程式,大致上都沒問題喔。所以可能再檢查一下你的 local 端是否有這些檔案:

作者: hanmin888    時間: 2008-12-13 11:22     標題: 沒有圖

date_16x16.gif
我沒有這個圖耶...
所有的圖都沒有,應該要去哪得到這些圖呢?
謝謝
作者: wmh    時間: 2008-12-13 17:33

你可以直接把這個網頁的圖另存,或者到這邊找更多圖:
http://www.cachefile.net/graphics/ui/aspnet/
作者: hanmin888    時間: 2008-12-15 15:22

雖然我現在有圖了
但是還是失敗
html部分是抄官網的程式碼, 檢視原始檔
我基本瀏覽器是 Opera 9.6
我用IE8去跑這個html有出現javascript的錯誤如下
網頁指令碼錯誤

使用者代理程式: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)
時間戳記: Mon, 15 Dec 2008 07:14:48 UTC

訊息: 物件不支援此屬性或方法
行: 588
字元: 6
程式碼: 0
URI: file:///C:/Documents%20and%20Settings/It0009/My%20Documents/下載/javaScript/JQuery/jquery.datePicker-2.1.1.js
執行的Html如下
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">      
<html>      
<head>      
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">      
<title>月曆測試</title>      
<!--JavaScript-->      
<script type="text/javascript" src="jquery-1.2.6.js"></script>   
<script type="text/javascript" src="date.js"></script> 
<script type="text/javascript" src="jquery.datePicker-2.1.1.js"></script>           
<script type="text/javascript">      
$(function() {         
  Date.format = 'yyyy-mm-dd';         
  $('#date1').datePicker();         
});       
</script>        
<!--JavaScript-->       
<!--CSS-->       
<link rel="stylesheet" type="text/css" href="dataPicker.css" />      
<style type="text/css">         
a.dp-choose-date {         
  float: left;         
  width: 16px;         
  height: 16px;         
  padding: 0;         
  margin: 5px 3px 0;         
  display: block;         
  text-indent: -2000px;         
  overflow: hidden;         
  background: url(date_16x16.gif) no-repeat;         
}         
a.dp-choose-date.dp-disabled {         
  background-position: 0 -20px;         
  cursor: default;         
}         
input.dp-applied {         
  width: 100px;         
  float: left;         
}         
</style>        
<!--CSS-->       
</head>      
<body>      
<input type="text" name="date" id="date1" class="data-pick">      
     
</body>      
</html>   
[ 本帖最後由 hanmin888 於 2008-12-15 15:45 編輯 ]
作者: wmh    時間: 2008-12-15 23:02

我用 IE8 瀏覽也是正常喔,試試看我打包好的程式...
作者: hanmin888    時間: 2008-12-16 15:02     標題: 用了妳的檔案就變正常

換用你的js檔就正常了
關鍵的是那個date.js 不一樣
作者: kkw    時間: 2009-3-27 21:40

datepicker 取值了04/14/2009
指定日子怎樣不能選取,失效?
作者: yukar    時間: 2009-5-19 19:52

原帖由 wmh 於 2008-12-15 23:02 發表
我用 IE8 瀏覽也是正常喔,試試看我打包好的程式...


我下載了這個,只能選擇到當前年月份,之前的年月份無法選到,之后的年月份倒是可以。哪里設置?
作者: wmh    時間: 2009-5-19 22:45

預設是不能選取之前日期的,如果要允許可以選取之前的日期,要多給個參數,請參考:
$('.date-pick').datePicker({startDate:'01/01/1996'});

作者: ironman    時間: 2009-6-25 09:23

請教WMH大
我下載您的壓縮檔後
在test2.html內
有兩段<HTML></HTML>標籤
請問第二段是有何用途嗎
另如果我想改為2009/06/25 斜線的格式
在test2.html頁面內改就好嗎
好像會還原回2009-06-25 的格式ㄝ
謝謝
作者: wmh    時間: 2009-6-25 09:56

test2.html 似乎不小心多複製了一份相同的內容,所以請先刪除多餘的一半。

格式修改可以透過指定:
Date.format = 'yyyy/mm/dd';

作者: Jarstin    時間: 2009-10-23 14:28

想請問一下,用出來後,但同一個頁面要有二個以上的選單

但第二個之後都無法顯示,請問為什麼呢


作者: wmh    時間: 2009-10-24 09:10

原帖由 Jarstin 於 2009-10-23 14:28 發表
想請問一下,用出來後,但同一個頁面要有二個以上的選單

但第二個之後都無法顯示,請問為什麼呢



有沒有你的範例可以看呢?
作者: bob120400    時間: 2010-1-29 12:44

感謝大大的分享

想請問一個問題

date.js 裡面的日期 好像不能改成中文

譬如 禮拜一 禮拜二~

另外 可否設定 某天不能選呢?

謝謝~
作者: lcy122    時間: 2010-5-26 15:19

一樣在IE7也可以。
作者: artie0924    時間: 2010-7-26 09:32

各位大大你們好,
我想請教一下,我希望能解除它只能選擇今天以後的日期

$(function() {   
  $('#date2').datePicker({startDate:'1996-01-01'});   
});

這一段程式碼要放在哪裡?
作者: wmh    時間: 2010-7-26 23:31

其實只是多個參數,加在你原本的程式內即可。
作者: 9614038    時間: 2010-8-3 23:51

請問大大,我要如何降點選的月曆的值,傳送到下一個網頁去接收呢?

以下是我自己寫的,不過無法成功傳送值到下一個網頁!!!
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>月曆測試</title>
<!--JavaScript-->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2/jquery.min.js"></script>
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript" src="jquery.datePicker.js"></script>
<script type="text/javascript">
$(function() {   
Date.format = 'yyyy-mm-dd';
$('#date1').datePicker({
                                                startDate:'1996-01-01'
                                                });
});  </script>
<!--JavaScript-->
<!--CSS-->
<link rel="stylesheet" type="text/css" href="jquery.datePicker.css" />
<style type="text/css">
a.dp-choose-date {
  float: left;
  width: 16px;
  height: 16px;
  padding: 0;
  margin: 5px 3px 0;
  display: block;
  text-indent: -2000px;
  overflow: hidden;
  background: url(date_16x16.gif) no-repeat;
}
a.dp-choose-date.dp-disabled {
  background-position: 0 -20px;
  cursor: default;
}
input.dp-applied {
  width: 100px;
  float: left;
}
</style>
<!--CSS-->
</head>
<body>

<form name="form1" method="post" action="test4.php">
<input type="hidden" name="date1" id="date1" value="<? echo $date1 ?>" >

<input type="image" src="go.gif" border="0"  >

</form>
</body>
</html>
作者: wmh    時間: 2010-8-4 00:47

回復 23# 9614038

hidden 的欄位就看不到了吧!?
作者: 9614038    時間: 2010-8-4 02:23

嗯!!!網頁上看不到有hidden的欄位!!
為什麼? text會在網頁上出現欄位,hidden也會在網頁上出現欄位??

要怎麼改才能將我選的日期的值,傳送到test4.php這網頁去呢?
作者: wmh    時間: 2010-8-4 07:41

回復 25# 9614038

只要看得到欄位,選得到日期,應該就可以把值往 php 送了吧。
所以你目前問題是在哪呢?
作者: 9614038    時間: 2010-8-4 09:30

原本版大給的原始碼是!!將選到的日期顯示在input type="text"上,而我想要的是能值將姜選到的日期
傳送到另一個網頁去接收,我用form把它框起來,再將text改成hidden,網頁上呈現出來的,只有可以點選到月曆的日期,但是按送出,
並不會將植代過去另一個網頁上!,而且原本的網頁上也不會出現像text還有出現欄位。是改成hidden就不會出現欄位嗎?我程式碼如上面所po~

請版大解答~謝謝
作者: wmh    時間: 2010-8-5 00:02

回復 27# 9614038

改成 hidden 應該是會有問題吧,月曆元件應該無法正常運作。
但是為什麼要 改成 hidden 呢?
作者: 9614038    時間: 2010-8-5 09:16

因為我想直接將選擇的日期直接傳送到下一個網頁,不想讓它顯示在text box裡面,
可是我以為改成hidden就行,後來月曆就不能使用了!!有什麼辦法可以直接將選擇
的日期直接傳送另一個網頁,去接收值(選擇的日期)嗎?
作者: wmh    時間: 2010-8-6 00:11

回復 29# 9614038

你可以參考一下官方的範例,有 inline 的用法可以參考:
http://www.kelvinluck.com/assets ... lineDatePicker.html

在 dateSelected 後,把值填到你的 hidden 欄位即可
作者: 9614038    時間: 2010-8-9 15:56

需要將原本的function(如下)拿掉嗎?
$(function() {   
Date.format = 'yyyy-mm-dd';
$('#date1').datePicker({
                                                startDate:'1996-01-01'
                                                });
});  

貼上官方這個function(如下)嗎?
  $(function()
{
        $('.turn-me-into-datepicker')
                .datePicker({inline:true})
                .bind(
                        'dateSelected',
                        function(e, selectedDate, $td)
                        {
                                console.log('You selected ' + selectedDate); ps.hidden是要寫在哪一段                        }
                );
});

請大大解答
作者: wmh    時間: 2010-8-11 07:28

回復 31# 9614038

沒錯,就在你標注紅色的那一段。
就把值給填入你的 hidden 欄位即可。
$("#date1").val(selectedDate);

作者: 9614038    時間: 2010-8-11 19:41

console.log('You selected ' + selectedDate);  直接將這段語法換成$("#date1").val(selectedDate);  是嗎??

原本的這段語法呢? $(function() {   
Date.format = 'yyyy-mm-dd';
$('#date1').datePicker({
                startDate:'1996-01-01'
                });
});

要保留嗎?

若刪除原本這段語法,月曆的圖示就不會出現了!!

可以請版大貼完整的程式語法給我嗎??
作者: wmh    時間: 2010-8-12 08:16

回復 33# 9614038

有些比較基礎的東西你可能要自己先 study 一下喔。
datePicker() 的初始化當然只需要做一次,但是參數要給正確的。
作者: 9614038    時間: 2010-8-14 17:39

板大有辦法將Sun Aug 8 00:00:00 UTC+0800 2010
轉換成2010/08/08 這種格式嗎?

Funtion內也有輸入Date.format = 'yyyy/mm/dd';
不過送出至test4.php,還是顯示範例的這種格式 ( Sun Aug 8 00:00:00 UTC+0800 2010 )

$(function()
{
        Date.format = 'yyyy/mm/dd';
        $('.turn-me-into-datepicker')
                .datePicker({inline:false, startDate:'1996-01-01'})
                .bind(
                        'dateSelected',
                        function(e, selectedDate, $td)
                        {
                                //console.log('You selected ' + selectedDate);
                                $("#setday").val(selectedDate);
                        }
                );
});
作者: wmh    時間: 2010-8-15 00:20

回復 35# 9614038

selectedDate 是 JavaScript 的 Date 物件,所以如果直接轉成字串就會是你看到的那樣一串。
有兩種方式可以處理,一種是在存到 hidden 前,用 JavaScript Date 相關的 function 轉為你要的格式,
//這邊還需要自己再處理格式
var Y = selectedDate.getFullYear();
var m = selectedDate.getMonth() + 1;
var d = selectedDate.getDay();
$("#setday").val(Y + "/" + m + "/" + d);
另一種方式是先存成 timestamp,到 php 後再用 date() 轉為你要的格式。
$("#setday").val(selectedDate.getTime() / 1000);
$date = date("Y/m/d", $setday);

作者: chs965033    時間: 2013-7-27 01:01

板大 你好 雖然發布時間 離現在有點久遠
剛好需要您這個功能 想請問一下 如果 我想要限制選取該如何設定呢?
例如: 當日起的兩天內 不能點選日期
2013.7.27 在加上48hr 以內的日期都不能選取

麻煩教導一下 因為專長不是這方面 但這功能對我來說蠻重要的 感謝
作者: wmh    時間: 2013-7-27 02:15

回復 37# chs965033

用本文所提到的 date.js 很容易可以把日期指定為兩天後。
$('#date').datePicker({startDate: new Date().addDays(2).toISOString().substr(0, 10) });

作者: chs965033    時間: 2013-7-28 00:32

抱歉阿
可能是我講得不好
我是需要 限制當日起的兩天不能點選
例如 7/28號  那29 30 就不能點選之後的日期就可以點選
作者: wmh    時間: 2013-7-28 22:47

回復 39# chs965033

那就是加三天,上面的範例addDays(2) 改成 addDays(3) 即可
作者: chs965033    時間: 2013-7-29 14:07

那這段要加在date.js的哪裡呢?
加上去之後都沒反應.
作者: ruby1080    時間: 2014-2-19 12:01

版大您好:

我想請問一點問題
以下是我部分的程式:
1. <script src="../js/jquery-1.10.2.min.js" type="text/javascript"></script>
2. <script src="../js/nav.js" type="text/javascript"></script>
3. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2/jquery.min.js"></script>
4. <script src="../js/date.js" type="text/javascript"></script>
5. <script src="../js/jquery.datePicker.js" type="text/javascript"></script>
---------------------------------------------
1. 及 3. 應該是一樣的吧?
但是去除3.之後月曆卻不能用了

但如果1~5放入,反而是nav.js的功能無效了

為什麼呢?請指點><
作者: ruby1080    時間: 2014-2-19 12:14

月曆似乎一定要用jquery-1.2.6.js版本

......冏了




歡迎光臨 jsGears.com 技術論壇 - AJAX, JavaScript, jQuery, 網站開發, 前端效能優化 (http://jsgears.com/)