无论我尝试什么,都无法使日期选择器的 beforeShow 事件触发。这是我的代码:
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function(input, inst) { alert('before'); }
});
我已经为我的日期选择器添加了beforeShowDay和onSelect事件,它们确实正确地触发。还有其他人遇到这个问题吗?
无论我尝试什么,都无法使日期选择器的 beforeShow 事件触发。这是我的代码:
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function(input, inst) { alert('before'); }
});
我已经为我的日期选择器添加了beforeShowDay和onSelect事件,它们确实正确地触发。还有其他人遇到这个问题吗?
这是我的团队想出的解决方案,这样我们就不必每次更新时都记得修改jQuery文件。只需将以下代码添加到您自己的脚本中并包含即可:
(function ($) {
$.extend($.datepicker, {
// Reference the orignal function so we can override it and call it later
_inlineDatepicker2: $.datepicker._inlineDatepicker,
// Override the _inlineDatepicker method
_inlineDatepicker: function (target, inst) {
// Call the original
this._inlineDatepicker2(target, inst);
var beforeShow = $.datepicker._get(inst, 'beforeShow');
if (beforeShow) {
beforeShow.apply(target, [target, inst]);
}
}
});
}(jQuery));
实际上,这种方式更加正确(并且遵循插件/类模式):
var beforeShow = $.datepicker._get(inst, 'beforeShow');
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(target, [target, inst]) : {}));
_inlineDatepicker
方法中,在 this._updateAlternate(inst)
这行代码的下一行。在完整的 jquery-ui-1.8.23.js 文件中,这应该是第 7156 行。 - Big McLargeHugethis._updateAlternate(inst);
在这一行之后,加入以下内容:var beforeShow = $.datepicker._get(inst, 'beforeShow');
if(beforeShow)
beforeShow.apply();
来自jqueryui.com的版本没有内联日期选择器启用beforeShow选项。使用这段代码,beforeShow将被启用。
我想使用beforeShow来更新结束日期datepicker上的最小日期,以反映在开始日期datepicker中设置的日期。我已经查看了这里和其他地方发布的许多复杂解决方案。也许我错过了什么,但是以下非常简单的代码适用于我。
如果尚未设置开始日期并尝试输入结束日期,则将焦点重置为开始日期。如果已设置开始日期,则相应地设置结束日期的最小日期。
$(function(){
$("#start_Date").datepicker({
changeMonth: true,
changeYear: true,
yearRange: "c-1:c+5",
dateFormat: "dd-mm-yy"
});
$("#end_Date").datepicker({
changeMonth: true,
changeYear: true,
yearRange: "c-1:c+5",
dateFormat: "dd-mm-yy",
beforeShow: end_Range
});
function end_Range(){
if ($("#start_Date").datepicker("getDate") == null ){
$("#start_Date").focus();
} else {
// set minimum date range
$("#end_Date").datepicker("option", "minDate", new Date ($("#start_Date").datepicker("getDate")));
};
};
});
带日期字段:
<label>Date</label><input class="datepicker" id="start_Date" type="text"/>
<label>Date</label><input class="datepicker" id="end_Date" type="text"/>
这有点棘手,但使用setTimeout方法来启动函数对我很有效。
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function() {
setTimeout(function() {
alert('before');
}, 10);
}
});
$('#calendar').datepicker('destroy');
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function(input, inst) {
alert('before');
}
});