javascript last iteration设置所有迭代的值

时间:2013-10-19 19:03:30

标签: javascript javascript-events

var myElements = document.getElementsByName('bb1');
    for (var i = 0; i < myElements.length; i++) {
        var curValue = myElements[i].getAttribute('innerId')
        myElements[i].addEventListener('mouseover', function () {
            alert('Hello i am : ' + curValue);
        }, false);
    }

当鼠标悬停时,每个元素,而不是显示curValue的不同值,将显示一个常量值(最后一个迭代值)。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

JavaScript中的for块内部没有不同的范围,因此当您的鼠标悬停事件被触发时,它将提醒上一次迭代中设置的当前变量值。

您可以在回调函数中使用this来获取触发事件的对象的属性。

var myElements = document.getElementsByName('bb1');
for (var i = 0; i < myElements.length; i++) {
    myElements[i].addEventListener('mouseover', function () {
        alert('Hello i am : ' + this.getAttribute('innerId'));
    }, false);
}

答案 1 :(得分:0)

这里的一般问题是 Javascript中的闭包。当使用回调函数中未定义的变量(在本例中为 curValue )时会发生这种情况。

我建议阅读关于JS闭包here的答案。