我正在为 jQuery 对话框创建动态按钮。一个 json 对象包含按钮的信息。我正在使用 for in 循环来遍历对象中的每个属性。当我遍历新对象时,为每个按钮填充的匿名函数是空白的,但在对话框中实际单击时显示每个函数都填充了最后一个值。
对话框代码:
$('#dialogDiv').dialog({
autoOpen:false,
modal:true,
resizable:false,
width: 600,
height:100,
position:"center",
overlay: {
opacity: 0.2,
background: "black"
}
});
从 json 对象创建按钮的代码:
var obj1 = {but1:{Label:"button1"},but2:{Label:"button2"},but3:{Label:"button3"}};
var newObj = {};
for(var k in obj1){
if (obj1.hasOwnProperty(k)){
var ob2 = obj1[k];
for(var x in ob2){
var nl = ob2[x];
newObj[nl] = function(){
$(this).dialog("close");
console.log(nl);
}
}
}
}
如果我遍历 newObj 每个函数都是空白的。
for(var z in newObj){
console.log(newObj[z]);
}
将按钮对象添加到对话框并打开它。
$('#dialogDiv').dialog({buttons : newObj});
$('#dialogDiv').dialog("open");
当单击任何按钮时,控制台会显示它们对于函数内的 nl 变量都有相同的值。为什么没有正确设置?变量范围?我知道如果不使用第二个 for 循环,这可能会更容易编写,但我认为这是嵌套循环的范围问题。我也没有包含触发执行此操作的函数的单击事件的代码,但这不是问题。