我正在爲jQuery對話框創建動態按鈕。一個json對象包含按鈕的信息。我正在使用for for循環來遍歷對象中的每個屬性。當我遍歷新對象時,爲每個按鈕填充的匿名函數是空白的,但是顯示在對話框中實際單擊時,每個函數都使用最後一個值填充。在循環中的jquery動態按鈕對話框不會填充函數
代碼的對話框:
$('#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循環,但我認爲這是嵌套循環的範圍問題。我也沒有包含啓動這個功能的click事件的代碼,但這不是問題。
如果您在分配的匿名函數前面插入了'var',這會起作用嗎? –