使用一个循环为每个div添加不同的onclick。
使用一个循环为每个div添加不同的onclick。
这个问题已经有了答案:
可能的重复问题:
我想通过一个循环动态地向我的div元素添加不同的onclick。
这是我代码的简化版本。
var colors=['blue','green','yellow']; var newtxt=['box1','box2','box3']; var i; function set_element2() { var x=document.getElementById('mydiv').getElementsByTagName('div'); for(i=0;i<x.length;i++) { var d=x[i]; var col=colors[i]; var txt=newtxt[i]; d.style.background=col; d.onclick=function(){d.innerHTML=txt}; } }
当我单击每个div时,我希望它们显示newtxt [i]。问题在于,颜色会像它们应该那样逐个更改,但是onclick仅影响最后一个div。如果我单击div 0或div 1,它仅更改div2的inner html,而不是每个div。
function wrongway() { x[0].onclick=function(){x[0].innerHTML=newtxt[0];}; x[1].onclick=function(){x[1].innerHTML=newtxt[1];}; x[2].onclick=function(){x[2].innerHTML=newtxt[2];}; }
按照这种方式操作可以,但是我需要在循环中执行此操作,以便不必为每组div创建几个函数,这样不够DRY。
这是我的带有样式的HTML代码:#mydiv div- height:50px; width:200px; border:1px solid black;
谢谢任何答案,如果我的措辞有点令人困惑,请见谅。
tl;dr我想使用1个循环向一组div添加单独的onclick
编辑以获得更多清晰度*
解决方案通过指定d.i = i,并使用this解决了这个问题。
function multOnclicks() { var x=document.getElementById('mydiv').getElementsByTagName('div'); for(i=0;i<x.length;i++) { var d=x[i]; var col=colors[i]; var txt=newtxt[i]; d.style.background=col; d.i = i; d.onclick=function(){this.innerHTML=newtxt[this.i]}; } }
admin 更改状态以发布 2023年5月21日