2012-02-15 43 views
5

我有几个jQuery UI的对话框处理程序,所有这些都包含以下内容:jQuery UI的对话框 - 设置默认配置

open: function(event, ui) { 
     $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
     $(".ui-dialog").removeClass("ui-corner-all"); 
}, 

这是为了使对话具有方角,而不是圆的。我想知道是否可以将此设置设置为默认设置,以便我不必将此代码插入到页面上的每个对话框配置中。

我知道我可以编辑CSS,但如果不需要的话,实际删除该类会更有意义。

+0

'你设置为默认'是什么意思?这将编辑CSS。我发现在每次打开对话框时都不需要使用JavaScript,只需轻松编辑CSS即可删除圆角。 – j08691 2012-02-15 15:30:21

+0

可能希望看到这个更好的答案: http://stackoverflow.com/questions/2287045/override-jqueryui-dialog-default-options – phazei 2013-08-28 02:49:42

回答

8

我知道这并不完美,但是您可以定义您自己的包含默认值的defaults对象。然后,如果你需要重写或添加到这些默认值,你可以使用$.extend:使用on(或它的兄弟姐妹delegate

var dialogDefaults = { 
    open: function (event, ui) { 
     $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
     $(".ui-dialog").removeClass("ui-corner-all"); 
    } 
}; 
// then later on: 
$("#foo").dialog($.extend({ }, dialogDefaults, { 
    autoOpen: false, 
    width: 500, 
    /* etc... */ 
})); 

还记得的事件,您可以绑定到他们的选项之外的对象, bindlive)。您可以通过应用同一类所有的对话框,例如申请该事件处理程序,以多个对话:

$("div.my-dialog-class").on("dialogopen", function (event, ui) { 
    $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
    $(".ui-dialog").removeClass("ui-corner-all"); 
}); 

记住只要保持此事件处理程序将不会触发关闭新的对话框。您可以让事件冒泡的DOM到body和附加事件处理程序有(这是我会去的路线):

$(document.body).on("dialogopen", "div.my-dialog-class", function (event, ui) { 
    $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
    $(".ui-dialog").removeClass("ui-corner-all"); 
}); 

随着事件委派的这种方法,你申请你的open功能,所有对话框将永远附加到document.body

+0

什么是使用这个默认的概念为各种对话框属性设置(我是否也这样说)?我有一系列对话共享大约10-12个常用属性设置,维护变得很麻烦。只需要担心每个对话框的独特设置就好了。 – InteXX 2014-09-11 05:35:13

+0

好吧,明白了。说得太快。我只是在开放之前像往常一样添加它们。我用[this](http://stackoverflow.com/questions/5409633/how-to-set-jquery-ui-dialog-defaults)作为参考。很好,谢谢。 – InteXX 2014-09-11 05:43:37