jQueryUI模式将函数添加到默认值

时间:2011-09-22 18:15:04

标签: javascript jquery jquery-ui jquery-ui-dialog

我总是发现自己在我添加的每个jQueryUI模式上修复this chrome scrollbar issue。所以,我想我可以将该代码添加到jqueryUI对话框默认值。我找到了this question,但无法弥补差距,并将其应用于我的代码。

$.extend($.ui.dialog.prototype.options, {
    open: function(event, ui){
        window.setTimeout(function(){jQuery(document).unbind('mousedown.dialog-overlay').unbind('mouseup.dialog-overlay');}, 100);
    }
});

问题是,如果我在对话框打开事件中有代码,它将覆盖默认值。

$("#modalContent").dialog({
    open:function(){
        alert('Hey buddy!');
    }
});

所以我的问题是两部分;如何堆叠函数而不是覆盖它们,我是否应该首先执行此操作?谢谢!

这是一个jsfiddle: http://jsfiddle.net/McWatt/HSA8M/

2 个答案:

答案 0 :(得分:0)

解决方案比较简单。您可以通过覆盖$.ui.dialog.overlay.events来删除这些事件,这将阻止它们开始受限:

$.ui.dialog.overlay.events = $.map('focus,keydown,keypress'.split(','),
        function(event) { return event + '.dialog-overlay'; }).join(' ');

注意:如果删除keydown,则无法使用转义键关闭对话框。您可能还想查看覆盖create - 方法。查看source了解详情。

请参阅test case on jsFiddle

答案 1 :(得分:0)

在我看来,你的jsfiddle有一个问题:

  • 对话框未被销毁,因此打开的回调保持不变

这是一个更新的小提琴:http://jsfiddle.net/thomas_peklak/HSA8M/3/

尽管如此,我还是不建议修改库对象的默认值。在我看来,基于ui.dialog创建自己的ui.widget并覆盖对象中的默认值会更安全。

您的情况似乎相当简单,但我们应该在哪里划清干净和纠缠的代码?