循环结果数组的最后一个索引

时间:2018-09-11 13:23:31

标签: javascript javascript-events addeventlistener

我有以下代码,可以使用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 */ })();总是显示索引,但是我不知道为什么在事件中它总是显示最后一个索引。

请帮助,谢谢建议。

1 个答案:

答案 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);
        });
    })();

}