2015-03-19 162 views
0

我有這樣的代碼:變量lambda函數未定義

$.post("call.php", {form: data.item.value, positiony: t}, function (data){ top[t] = data;}); 
$("#pos" + t).css("margin-top", top[t]); 

,我打電話與阿賈克斯的功能柱和返回值頁用來設置與增量編號一系列DIV的上邊距pos0,#pos1 ...; 如果我用數字改變t,n次,其中n是div的數量,我沒有問題;但如果我使用'for'來增加值,我在lambda函數中有未定義的變量t;事實上,如果我在lambda函數後打印top [t],打印的值是不確定的。 我該如何解決?

回答

1

阿賈克斯是異步。您的第二行正在運行,然後 ajax調用完成。移動它成功處理程序:

$.post("call.php", {form: data.item.value, positiony: t}, function (data){ 
    top[t] = data; 
    $("#pos" + t).css("margin-top", top[t]); 
}); 

另外,如果你使用t的計數器這樣的循環,注意,您的所有功能,成功將有持久的參考變量t而不是它的創建時間副本。所以你可能需要一個建造者功能,或者只是Function#bind

for (t = something; t < somethingElse; ++t) { 
    $.post("call.php", {form: data.item.value, positiony: t}, function (tValue, data){ 
     top[tValue] = data; 
     $("#pos" + tValue).css("margin-top", top[tValue]); 
    }.bind(null, t)); 
} 
+1

非常感謝!!!!!有用!! – dav04 2015-03-19 11:30:05