事件的 jqueryui 日期选择器"创建"不起作用



在我使用jQueryUI的日期拾取器插件的项目中,

但是在这段代码中,"create"事件从未触发,

你可以在官方网站查看文档:

http://jqueryui.com/demos/datepicker

选项选项卡中的

$('#datepicker').datepicker({
    create: function(event, ui) {
        alert("ppp");
    }
});

文档位于(正如Nick所指出的)。如果您查看源代码中的jquery.ui.widget.js,您将看到如下内容:

$.Widget.prototype = {
    // ...
    _createWidget: function( options, element ) {
        // ...
        this._trigger( "create" );
        this._init();
    },

所以create事件是由jQuery-UI小部件工厂处理的,所以它应该被所有小部件支持。如果您查看jquery.ui.button.js,您将看到正在使用的部件工厂:

$.widget( "ui.button", {
    options: {
        //...

,您会发现按钮小部件确实触发创建事件。如果您查看jquery.ui.datepicker.js,您将找不到任何$.widget,但您会发现当日期选择器转换为小部件工厂时要做的事情的提醒:

// TODO rename to "widget" when switching to widget factory
_widgetDatepicker: function() {
    return this.dpDiv;
},

datepicker不使用widget工厂,也不实现create事件本身。

beforeShow事件确实可以工作,所以也许你可以使用它。

快速演示(请打开控制台):http://jsfiddle.net/ambiguous/kn3hq/

我认为这是一个公开的问题。

http://bugs.jqueryui.com/ticket/6935

您可以使用一个临时解决方案,在"母版页"中使用"dom插入事件"来捕获日期拾取器创建:

$(document).bind('DOMNodeInserted', function (event) {
    //  If is a datepicker element
    if ($(event.target).hasClass('ui-datepicker-calendar')) {         
        //  Check only new elements
        $('.hasDatepicker:not(.controlClass)').each(function (i, obj) {
            //  Add class for avoid current obj in next datepicker creation
            $(obj).addClass("controlClass");
            //  Do what you want with $(obj)
        });
    }
});

最新更新