我希望callingFunction能够覆盖showDivPopUp
函数中提供的默认选项。
function calling(){
showDivPopUp("title of pop up box", "message to show",
{
buttons:{
Yes: function () {
$(this).dialog("destroy");
},
No :function () {
$(this).dialog("destroy");
}
}
});
}
function showDivPopUp(title,msg,options){
var mgDiv = $("#msgDiv");
mgDiv.attr("innerHTML", msg);
return mgDiv.dialog({
modal: true,
buttons: {
Ok: function () {
$(this).dialog("destroy");
}
},
resizable: true,
show: "explode",
position: "center",
closeOnEscape: true,
draggable: false,
title : titl,
open: function (event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
}
所以,上面的代码应该显示两个按钮即。 Yes
和No
而非OK
。我不想if
检查每个选项。
更新
在options参数中,可能存在未应用默认值的选项。因此,调用函数可以指定size
函数中未提及的showDivPopUp
选项。
答案 0 :(得分:11)
您希望使用JQuery extend()方法将传递给函数的选项与其中指定的默认值合并。
请参阅: http://www.zachstronaut.com/posts/2009/05/14/javascript-default-options-pattern.html 和 http://api.jquery.com/jQuery.extend/
//calling function source excluded, use exactly the same.
function showDivPopUp(title, msg, options) {
//create basic default options
var defaults = {
modal: true,
buttons: {
Ok: function() {
$(this).dialog("destroy");
}
},
resizable: true,
show: "explode",
position: "center",
closeOnEscape: true,
draggable: false,
title: title,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
}
//merge the specified options with the defaults.
//in example case, will have the above except with the new buttons specified
if (typeof options == 'object') {
options = $.extend(defaults, options);
} else {
options = defaults;
}
var mgDiv = $("#msgDiv");
mgDiv.attr("innerHTML", msg);
return mgDiv.dialog(options);
}
答案 1 :(得分:1)
看起来'options'是JSON格式的。尝试省略showDivPopUp的第三个参数中的第一个{buttons:
部分或者在showDivPopUp函数中设置buttons: options.buttons
。
要对此进行扩展,请创建更多json对,并在showDivPopUp函数中测试它们的存在。存在?覆盖。不存在?保持默认值。
{buttons:{
Yes: function () {
$(this).dialog("destroy");
},
No :function () {
$(this).dialog("destroy");
}
},
background:"blue",
fontsize:15
}
访问每个通道:
options.buttons
options.background
options.fontsize
使用以下方法测试存在:
if ( typeof( window[ 'option.fontsize' ] ) != "undefined" ) {override code}
回答问题中的更新:
使用jquery.each迭代传递选项中的所有元素。
答案 2 :(得分:0)
在mgDiv.dialog
函数中,修改buttons
键以获得条件值。 E.g:
function showDivPopUp(title,msg,options){
var mgDiv = $("#msgDiv");
mgDiv.attr("innerHTML", msg);
return mgDiv.dialog({
modal: true,
buttons: options.buttons || {
Ok: function () {
$(this).dialog("destroy");
}
},
resizable: true,
show: "explode",
position: "center",
closeOnEscape: true,
draggable: false,
title : titl,
open: function (event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
}