无论我尝试什么,我都无法在我的日期选择器上触发beforeShow事件。这是我的代码:
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function(input, inst) { alert('before'); }
});
我已将beforeShowDay和onSelect事件添加到我的datepicker中,并且它们会正确触发。还有其他人遇到过麻烦吗?
答案 0 :(得分:25)
这是我的团队提出的解决方案,因此我们不必记住每次更新时都要修改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));
答案 1 :(得分:5)
实际上,这是更正确的(并遵循插件/类模式):
var beforeShow = $.datepicker._get(inst, 'beforeShow');
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(target, [target, inst]) : {}));
答案 2 :(得分:4)
我找到了解决方法。 您必须在jquery.ui.datepicker.js(完整版)中添加3行代码
在第274行附近,找到此this._updateAlternate(inst);
在此行之后,请填写以下内容:
var beforeShow = $.datepicker._get(inst, 'beforeShow');
if(beforeShow)
beforeShow.apply();
来自jqueryui.com的版本没有为内联datepicker启用beforeShow。 使用此代码,启用beforeShow。
答案 3 :(得分:1)
我想使用beforeShow更新结束日期datepicker上的最小日期,以反映开始日期datepicker中设置的日期。我已经在这里和其他地方发布了一些复杂的解决方案。我可能会遗漏一些东西,但以下非常简单的代码对我有效。
如果尚未设置并且尝试输入结束日期,则会将焦点重置为开始日期。如果已设置开始日期,则会相应地设置结束_Date的最小日期。
$(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"/>
答案 4 :(得分:0)
这有点棘手,但使用 setTimeout 方法启动该功能对我来说效果很好。
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function() {
setTimeout(function() {
alert('before');
}, 10);
}
});
答案 5 :(得分:0)
您之前是否已将datepicker()指定给此元素?
firstShow事件在第一次分配datepicker()时附加到元素。
如果将datepicker()重新分配给同一个元素,则它将无法正常工作。
尽量摧毁&#39;并重新分配对我来说很有用的datepicker()。
$('#calendar').datepicker('destroy');
$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function(input, inst) {
alert('before');
}
});