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
。