beforeShow事件未在jQueryUI Datepicker上触发

bes*_*nce 23 jquery-ui datepicker

无论我尝试什么,我都无法在我的datepicker上触发beforeShow事件.这是我的代码:

$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function(input, inst) { alert('before'); }
});
Run Code Online (Sandbox Code Playgroud)

我已将beforeShowDay和onSelect事件添加到我的datepicker中,并且它们正确地触发.有没有其他人有这个问题?

Dav*_*edy 26

这是我的团队提出的解决方案,因此我们不必记住每次更新时都要修改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));
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.工作得很完美.谢谢! (4认同)

小智 5

实际上,这更正确(并遵循插件/类模式):

var beforeShow = $.datepicker._get(inst, 'beforeShow');
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(target, [target, inst]) : {}));
Run Code Online (Sandbox Code Playgroud)


Mao*_*gue 0

这有点棘手,但使用setTimeout方法来启动该功能对我来说效果很好。

$('#calendar').datepicker({
inline: true,
dateFormat: 'mm,dd,yy',
beforeShow: function() { 
    setTimeout(function() {
        alert('before'); 
    }, 10);
}
});
Run Code Online (Sandbox Code Playgroud)