jqueryui datepicker“创建”事件不起作用

时间:2011-12-09 03:31:29

标签: jquery jquery-ui events datepicker

在我的项目中使用了jQueryUI的插件日期选择器,

但在此代码中,“create”事件永远不会触发,

您可以查看官方网站上的文档:

  

http://jqueryui.com/demos/datepicker

选项标签中的

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

3 个答案:

答案 0 :(得分:3)

文件存在(如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,但是当你将datepicker转换为widget工厂时,你会发现有关要做的事情的提醒:

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

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

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

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

答案 1 :(得分:2)

我认为有一张关于此的公开票。

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

答案 2 :(得分:0)

您可以使用临时解决方案完成,在“母版页”中使用“dom inserted event”来捕捉日期选择器的创建:

$(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)

        });
    }
});