我有以下代码,可以使用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()
的结果
[样本:input.sample.fld,例如:input.example.fld]
isobj(elm)
是function
来检查variable
是否是object
,就像iselm(elm)
是function
来检查{{ 1}}是variable
。
由于要解决此问题,我试图在循环中使用element
,但仍然无法正常工作。
我已经确保(function() { /* i put the addEventListener as above */ })();
总是显示索引,但是我不知道为什么在事件中它总是显示最后一个索引。
请帮助,谢谢建议。
答案 0 :(得分:1)
在执行该行代码时,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);
});
})();
}