0
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 值,而是显示一个常量值(最后一次迭代值)。

我在这里做错了什么?

4

2 回答 2

0

块内部没有像forJavaScript 那样的不同范围,所以当你的鼠标悬停事件被触发时,它会提醒在最后一次迭代中设置的当前变量值。

您可以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);
}
于 2013-10-19T19:11:43.287 回答
0

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

我建议在这里阅读有关 JS 闭包的答案。

于 2013-10-19T19:29:39.507 回答