Javascript 在for循环中添加事件

Javascript 在for循环中添加事件,javascript,events,Javascript,Events,我想用鼠标悬停事件将每个的内部文本更改为* HTML <p id="object1">O</p> <p id="object2">O</p> <p id="object3">O</p> O O O 我写了一个脚本,但它只影响最后一个。我的剧本怎么了?如果能得到帮助,我将不胜感激 JavaScript var nodeList = document.getElementsByTagName('p'); for (var

我想用鼠标悬停事件将每个
的内部文本更改为
*

HTML

<p id="object1">O</p>
<p id="object2">O</p>
<p id="object3">O</p>

O

O

O

我写了一个脚本,但它只影响最后一个
。我的剧本怎么了?如果能得到帮助,我将不胜感激

JavaScript

var nodeList = document.getElementsByTagName('p');

for (var i = 0; i < nodeList.length; i++) {
    var obj = Utility.$(nodeList[i].id);
    obj.addEventListener('mouseover', function () {
        obj.innerHTML = '*';
    }, false);
}
var nodeList=document.getElementsByTagName('p');
对于(变量i=0;i
您应该在事件处理程序中使用事件参数,否则,
obj
是最后一个赋值对象(在循环中赋值)

而且您不需要任何
实用工具
助手

var nodeList = document.getElementsByTagName('p');

for(var i = 0; i < nodeList.length; i++)
{ 
    var obj = nodeList[i];
    obj.addEventListener('mouseover', function(e){
        e.target.innerHTML = '*';
    }, false);
}
var nodeList=document.getElementsByTagName('p');
对于(变量i=0;i

最简单解决方案的可能重复是
let obj=…
。更简单的是
this.innerHTML='*'在这里解释闭包有点太多了。当然,这有助于理解问题,但对于这种情况,只需解释事件处理程序通过
event.target
将受影响的元素作为参数IMO带来就足够了。或者更好的是,处理程序中的上下文
this
与循环的上下文不同。事件处理程序中的上下文正好是
event.target