DatePickerには内部関数_adjustDate()
があり、後でコールバックを追加したいと思います。
これが私が現在これを行っている方法です。基本的には、関数の定義をそれ自体に置き換えるだけでなく、新しい操作も必要です。これはすべての日付ピッカーに影響しますが、これも望ましいかどうかはわかりません。
_$(function(){
var old = $.datepicker._adjustdate;
$.datepicker._adjustDate = function(){
old.apply(this, arguments);
// custom callback here
console.log('callback');
};
});
_
_adjustDateは、次/前の月のクリック中に呼び出されるものです。この関数は3つのパラメーターを取ります。コールバックを追加するより良い方法があるかどうか知りたいです。
最終結果を次のようにしたいと思います。ここで、afterAjustDate
はコールバックハンドルです。
_$('#datepicker').datepicker({
showButtonPanel: true
, afterAdjustDate: function(){ $(this).find('foo').addClass('bar'); }
});
_
onChangeMonthYear
は受け入れ可能なイベントの代替手段ではなく、live()
/delegate()
(IEでは機能しません)バインディングオプションでもありません。
これは、月が選択された後にクラスを適用したり要素を操作したりする必要があるためです。月を変更すると、カレンダーの要素が再作成されます。これが実行されると、jQueryUIはクラスの変更を継承するほど賢くありません。したがって、日付を変更した後、コールバックが必要です。
私はこれを行う小さなデモを書きました...
$ .datepickerの拡張子を含むオブジェクトリテラルを作成してから、$。datepickerとオブジェクトに対して$ .extendを実行します。
ここでチェックできます: http://jsfiddle.net/NHN4g/4/
拡張機能自体は次のとおりです。
(function($){
var datepickerExtensions = {
_oldAdjustDate: $.datepicker._adjustDate,
_adjustDate: function(id, offset, period) {
var target = $(id);
var inst = this._getInst(target[0]);
var afterAdjustDate = this._get(inst, 'afterAdjustDate');
this._oldAdjustDate(id, offset, period);
if(afterAdjustDate && typeof afterAdjustDate === 'function'){
afterAdjustDate(id, offset, period);
}
}
}
$.extend($.datepicker, datepickerExtensions);
})(jQuery);
そしてデモ:
(html)
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" media="all">
<div class="demo">
<p>Date: <input type="text" id="datepicker"></p>
</div><!-- End demo -->
(javascript)
var changed = false;
$("#datepicker").datepicker({
afterAdjustDate: function(i,o,p){
if(!changed){
$('.ui-datepicker-month').css('color', '#f00');
}
changed = !changed;
}
});
コールバック関数をdatepickerに渡すために使用できるonSelectオプションがあります。これは、必要なものに対する組み込みのソリューションのようです。
$('.datepicker').datepicker({
onSelect: function(selectedDate) {
// custom callback logic here
alert(selectedDate);
}
});
Datepicker v1.0.0では、pick
オプションを使用できます。
var date = new Date();
$('.datepicker-trigger').datepicker({
format: 'mm/dd/yyyy',
autoPick: false,
startDate: date.getDate(),
changeMonth: false,
changeYear: false,
autoHide: true,
pick: function (selectedDate) {
console.log(selectedDate);
}
});
ソースファイルを開くと、default_options
で使用できるコールバック関数がいくつかあることがわかります。
onSelectDate: function () {},
onSelectTime: function () {},
onChangeMonth: function () {},
onGetWeekOfYear: function () {},
onChangeYear: function () {},
onChangeDateTime: function () {},
onShow: function () {},
onClose: function () {},
onGenerate: function () {},