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的不同值,将显示一个常量值(最后一个迭代值)。
我在这里做错了什么?
答案 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的答案。