受下面文章的啓發,使用DatePicker自帶的年月日相關的change事件,能夠「勉強」實現input控件的onchange(),直接上代碼:編程
一、第一種方式:利用DatePicker提供的年、月、日、時、分、秒 changing和changed事件,缺點是有時必須每一個事件都列出來,且點「今天」、「肯定」等按鈕是不響應的,代碼以下: api
$startTime.on("focus",function(){ WdatePicker({函數
dateFmt:'yyyy-MM-dd',
dchanged: function(dp){ setDatePickerValue( dp.cal.getNewDateStr(), $endTime,timeType);} ,
Mchanged: function(dp){ setDatePickerValue( dp.cal.getNewDateStr(), $endTime,timeType);} ,
ychanged: function(dp){ setDatePickerValue( dp.cal.getNewDateStr(), $endTime,timeType);}
});
});this
二、第二種方式:利用DataPicker提供的onpicking和onpicked事件,該事件能響應該控件的全部選擇操做,固然就包括「今天」按鈕,可是「清空」按鈕不會響應,它有本身的事件onclearing和oncleared,全部推薦使用這種方式來作change;spa
$startTime.bind("focus", function () {
WdatePicker({
dateFmt: 'yyyy-MM-dd',
maxDate: getShortDate(),
minDate: '2006-01-01',
onpicking: function (dp) {if (dp.cal.getDateStr() != dp.cal.getNewDateStr()) { setDatePickerValue(dp, $startTime, $endTime, "start_click", timeType); }}
});
});.net
function setDatePickerValue(newDate,$endTime,timeType)
{
if(timeType=="day")
{
var startTime=new Date(newDate);
var endTime=new Date(startTime.getTime()+1*24*60*60*1000);
$endTime.val(endTime.getFullYear() + "-" + (endTime.getMonth() + 1) + "-" + endTime.getDate());
}
if(timeType=="month")
{
var startTime=new Date(newDate);
var smonth=startTime.getMonth+1;
var m;
if(smonth==1||smonth==3||smonth==5||smonth==7||smonth==8||smonth==10||smonth==12)
{
m=startTime.getTime()+31*24*60*60*1000;
}
else{
m=startTime.getTime()+30*24*60*60*1000;
}
var endTime=new Date(m);
$endTime.val(endTime.getFullYear() + "-" + (endTime.getMonth() + 1));
}指針
若是你須要作一些附加的操做,你也沒必要擔憂,日期控件自帶的自定義事件能夠知足你的需求.此外,你還能夠在自定義事件中調用提供的API庫來作更多的運算和擴展,絕對能夠經過不多的代碼知足你及其個性化的需求.
注意下面幾個重要的指針,將對你的編程帶來不少便利
this: 指向文本框
dp: 指向$dp
dp.cal: 指向日期控件對象
注意:函數原型必須使用相似 function(dp){} 的模式,這樣子,在函數內部纔可使用dp對象
<input type="text" id="5421" onFocus="WdatePicker({onpicking: function(dp){if(!confirm('日期框原來的值爲: '+dp.cal.getDateStr()+', 要用新選擇的值:' + dp.cal.getNewDateStr() + '覆蓋嗎?')) return true;} })" class="Wdate"/>
注意: 你注意到dp.cal.getDateStr和dp.cal.getNewDateStr的用法了嘛? 詳見內置函數和屬性事件
選擇第一個日期的時候,第二個日期選擇框自動彈出
日期從: 至
注意: 下面第一個控件代碼的寫法
<input id="d5221 " class="Wdate" type="text" onFocus="var d5222=$dp.$('d5222');WdatePicker({onpicked: function(){d5222.focus();},maxDate:'#F{$dp.$D(\'d5222\')}'})"/>
至
<input id="d5222 " class="Wdate" type="text" onFocus="WdatePicker({minDate:'#F{$dp.$D(\'d5221\')}'})"/>
注意: $dp.$是一個內置函數 ,至關於document.getElementByIdip
年 月 日 時 分 秒
<input type="text" id="d523_y" size="5"/> 年
<input type="text" id="d523_M" size="3"/> 月
<input type="text" id="d523_d" size="3"/> 日
<input type="text" id="d523_HH" size="3"/> 時
<input type="text" id="d523_mm" size="3"/> 分
<input type="text" id="d523_ss" size="3"/> 秒
<img onclick="WdatePicker({el: 'd523' ,dateFmt:'yyyy-MM-dd HH:mm:ss',onpicked: pickedFunc })" src="../../My97DatePicker/skin/datePicker.gif" width="16" height="22" align="absmiddle" style="cursor:pointer"/>
<script>
function pickedFunc(){
$dp.$('d523_y').value=$dp.cal.getP('y');
$dp.$('d523_M').value=$dp.cal.getP('M');
$dp.$('d523_d').value=$dp.cal.getP('d');
$dp.$('d523_HH').value=$dp.cal.getP('H');
$dp.$('d523_mm').value=$dp.cal.getP('m');
$dp.$('d523_ss').value=$dp.cal.getP('s');
}
</script>
注意: el:'d523'中,若是你不須要d523這個框,你能夠把他改爲hidden,可是el屬性必須指定
$dp.$和$dp.cal.getP都是內置函數
<input type="text" class="Wdate" id="d531" onFocus="WdatePicker({onclearing: function(){if(!confirm('日期框的值爲:'+this.value+', 確實要清空嗎?'))return true;} })"/>
注意: 當onclearing函數返回true時,系統的清空事件將被取消,
函數體裏面沒有引用$dp,因此函數原型裏面能夠省略參數dp
<input type="text" class="Wdate" id="d532" onFocus="WdatePicker({oncleared: function(dp){alert('當前日期所選擇的月份爲:'+dp.cal.date.M);} })"/>
<script>
function d533_focus(element){
var clearingFunc = function(){ if(!confirm('日期框的值爲:'+this.value+', 確實要清空嗎?')) return true; }
var clearedFunc = function(){ alert('日期框已被清空'); }
WdatePicker({el:element,onclearing:clearingFunc,oncleared:clearedFunc})
}
</script>
<input type="text" class="Wdate" id="d533" onFocus="d533_focus(this) "/>
年月日時分秒都有對應的changing和changed事件,分別是:
ychanging ychanged
Mchanging Mchanged
dchanging dchanged
Hchanging Hchanged
mchanging mchanged
schanging schanged
<input type="text" class="Wdate" onFocus="WdatePicker({dchanging:cDayFunc , Mchanging: cMonthFunc, ychanging: cYearFunc , dchanged:cDayFunc , Mchanged: cMonthFunc , ychanged: cYearFunc })"/>
<script>
function cDayFunc(){
cFunc('d');
}
function cMonthFunc(){
cFunc('M');
}
function cYearFunc(){
cFunc('y');
}
function cFunc(who){
var str,p,c = $dp.cal;
if(who=='y'){
str='年份';
p='y';
}
else if(who=='M'){
str='月份';
p='M';
}
else if(who=='d'){
str='日期';
p='d';
}
alert(str+'發生改變了!\n$dp.cal.date.'+p+'='+c.date[p]+'\n$dp.cal.newdate.'+p+'='+c.newdate[p]);
}
</script>
這個例子用到了 $dp.cal.date 和 $dp.cal.newdate 屬性,你能從這裏發現他們的不一樣之處嗎?
下面是有關這兩個屬性的描述詳見內置函數和屬性
注:以上內容來自My97 Datapicker官網