我的页面中有几个模式对话框,而且还会有更多。我计划对它们都使用模态对话框,并让它们在覆盖点击时关闭。我不想在我实例化对话框的每个地方都绑定覆盖点击事件,所以我想扩展对话框原型或类似的东西,使其为所有模式对话框全局绑定点击事件。
http://jsfiddle.net/jurchiks/kLBJm/1/
假设我有以下对话框构造函数:
$('#dialog').dialog({
modal: true,
open: function()
{
$(this).find('input[type=text]').focus();
}
});
我试过把这段代码放在对话框实例化之前:
$.extend(
$.ui.dialog.prototype.options,
{
open: function()
{
var dialog = this;
$('.ui-widget-overlay').on('click', function()
{
$(dialog).dialog('close');
});
}
}
);
但它不起作用,jQuery只调用对话框参数中传递的open函数。我怀疑这只是更改了默认的打开函数,并且传递给构造函数的任何内容都会覆盖它。
$.widget(
"ui.dialog",
$.ui.dialog,
{
open: function()
{
this._super();
var dialog = this;
$('.ui-widget-overlay').on('click', function()
{
$(dialog).dialog('close');
});
}
}
);
这也不起作用;jQuery 吐出一个错误——“在初始化之前不能调用对话框上的方法;试图调用方法‘close’”——即使弹出窗口是打开的。我怎样才能做到这一点,以便覆盖单击和关闭事件是全局的并且不可覆盖?
PS 为什么这不是由 jQuery UI 库提供的?我认为这是非常受欢迎的事情。