Fra*_*kie 2 javascript jquery scope
我无法弄清楚这个范围问题:
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]);
});
}
}
Run Code Online (Sandbox Code Playgroud)
注意:menuItems和menuLink的长度相同.这个代码被剥离,以便更容易理解.
单击项目时此代码的结果是警报"未定义".它应该是来自menuLinks的数据.
救命!!!!
弗兰基
for (var i=0; i < menuItems.length; i++) {
(function(i) {
$("#"+menuItems[i]).click(function() {
alert(menuLinks[i]);
});
}(i));
}
Run Code Online (Sandbox Code Playgroud)
您需要在匿名函数中创建local 的当前值.i
.click
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
457 次 |
最近记录: |