覆盖 jQueryUI 对话框默认选项

Posted

技术标签:

【中文标题】覆盖 jQueryUI 对话框默认选项【英文标题】:Override jQueryUI dialog default options 【发布时间】:2011-01-18 05:25:37 【问题描述】:

我希望能够创建模态对话框,例如

close: function() 
    $(this).remove();

默认选项,无需在创建对话框时指定这些参数,但会以某种方式在一处覆盖这些参数。

这可能吗?

【问题讨论】:

【参考方案1】:

我也需要覆盖默认选项,我花了一段时间才弄清楚 jQuery UI 1.8:

$.extend($.ui.dialog.prototype.options, 
    modal: true,
    resizable: false,
    draggable: false
);

上面的代码将允许您在对话框选项的顶部放置任何内容。上述方法应该适用于大多数 UI 组件(它还可以让您对现有的功能进行原型设计,或添加到其中)。

【讨论】:

看起来我和@Softion 有同样的问题。这在 jQueryUI 1.8.16 中不起作用。 不,最后它工作正常。您需要更新浏览器缓存。 从 1.11.4 开始工作。下面的“默认”替代方案不适用于$.ui.dialogs.defaults === undefined【参考方案2】:

你应该创建一个抽象,然后调用 jQuery 对话框函数。

基本上,不是在您想使用 jQuery 对话框的每个地方创建选项文字,而是创建一个函数来创建您想要的选项,然后从中调用 jQuery 对话框函数。

然后,在代码的所有区域中,调用您编写的封装代码的函数。

此过程称为encapsulation,适用于大多数(如果不是全部)软件开发语言。主要好处之一是它使您的代码更易于维护。

【讨论】:

【参考方案3】:

jQuery UI 中的对话框和其他小部件使用它们的默认值定义一个哈希。您可以在加载 jQuery UI 后覆盖这些。

javascript 中搜索设置默认值的行:

$.extend($.ui.dialog, 
version: "1.7.2",
defaults: 
    ...

例如,在您的 javascript 中,您可以使用以下命令关闭 autoOpen:

$.ui.dialog.defaults.autoOpen = false;

或者您可以合并选项的哈希:

$.extend($.ui.dialog.defaults, 
  autoOpen: false,
  title: 'Default title'
)

【讨论】:

感谢您的回答。这 $.ui.dialog.defaults.autoOpen = false;失败。这 $.extend($.ui.dialog.defaults, autoOpen: false, title: 'Default title' ) 没有用,与添加它之前的行为相同:(再次感谢。 为我工作。一件事,您可能需要将这些默认设置延迟到 jquery ui 完成之后: setTimeout(function() ... set defaults here ... , 1);可以肯定的是,在此示例中 autoOpen false 的作用是,它将阻止显示对话框,直到您手动打开它。只是一个例子,尝试任何你想要的选项。

以上是关于覆盖 jQueryUI 对话框默认选项的主要内容,如果未能解决你的问题,请参考以下文章

覆盖默认浏览器alert()方法

如何扩展/覆盖 Angular Material $mdDialog.show 中的默认选项?

jQuery UI 1.10:对话框和 zIndex 选项

jQueryUI详解

将表单(添加)对话框设置为无模式

如何在显示效果期间制作 jQuery UI 对话框模式?