[英]Jquery Scope Issue
我無法弄清楚這個范圍問題:
var menuLinks = new Array("about.php", "contact.php");
function setClickListeners()
{
for(var i=0; i<menuItems.length; i++)
{
$("#" + menuItems[i]).click( function () {
window.alert(menuLinks[i]);
});
}
}
注意:menuItems和menuLink的長度相同。 這個代碼被剝離,以便更容易理解。
單擊項目時此代碼的結果是警報“未定義”。 它應該是來自menuLinks的數據。
救命!!!!
弗蘭基
for (var i=0; i < menuItems.length; i++) {
(function(i) {
$("#"+menuItems[i]).click(function() {
alert(menuLinks[i]);
});
}(i));
}
您需要在.click
為您的匿名函數設置i
的當前值。
JavaScript只有函數范圍。 所以,如果你不把i
地方,然后只要你按點擊的價值i
是電流值在這種情況下是menuItems.length - 1
。
你的上面做的是創造一個新的功能范圍和傳遞的價值i
進去,這樣的電流值, i
停留在該功能范圍不變。 這樣你的click函數就會從閉包中獲取i
的常量值。
JSLint的
讓我們過度復雜化代碼並滿足jslint。
var wrapper = function(i) {
$("#"+menuItems[i]).click(function() {
alert(menuLinks[i]);
});
};
for (var i=0; i < menuItems.length; i++) {
wrapper(i);
}
更清潔的代碼:
var menuLinks = new Array("about.php", "contact.php");
function setClickListeners()
{
$.each(menuLinks, function(i, element)
{
$("#" + menuItems[i]).click( function (e) {
alert(menuItems[i]);
e.preventDefault();
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.