循环结果数组的最后一个索引[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环结果数组的最后一个索引[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有以下代码,使用addeventlistener
为每个元素添加一个事件
var x, y, z;
elm = elm.normalize();
if(!isobj(elm) && iselm(elm)) {
elm = new Array(elm);
}
for(x in elm) {
(function() {
elm[x].addEventListener('click', function() {
alert(x);
});
})();
}
但是当我点击任何通过循环添加事件的element
时,它总是显示最后一个索引example
。就像当我点击element
时,它会在警告框内显示example
文本的警报。
这是console.log(elm)
之后的elm = elm.normalize()
的结果
[sample:input.sample.fld,example:input.example.fld]
isobj(elm)
是function
来检查variable
是否是object
,像iselm(elm)
一样是function
来检查variable
是否是element
。
由于解决这个问题,我试图在循环中使用(function() { /* i put the addEventListener as above */ })();
,但仍然无法正常工作。
我已经确保x
始终显示索引,但我不知道为什么它总是显示事件中的最后一个索引。
请帮助,谢谢你的建议。
答案
到执行代码行时,for循环已经完成。
解释:https://dzone.com/articles/why-does-javascript-loop-only-use-last-value
如果您的浏览器支持,您可以使用let
。 (参见文章的解释和替代方案)
var x, y, z;
elm = elm.normalize();
if(!isobj(elm) && iselm(elm)) {
elm = new Array(elm);
}
for(x in elm) {
(function() {
let myX = x;
elm[myX].addEventListener('click', function() {
alert(myX);
});
})();
}
以上是关于循环结果数组的最后一个索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章