在我使用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)
});
}
});