add event listener with argument in a loop
本问题已经有最佳答案,请猛点这里访问。
我通过以下方式动态创建带有单击事件的按钮:
1 2 3 4 5 6 7 8 9 10 | //add button for(i=1;i<=narrow+1;i++){ var btn = document.createElement("BUTTON"); btn.id="element"+i; var t = document.createTextNode("3D View"); btn.appendChild(t); btn.style.position="absolute"; btn.style.top="520px"; btn.style.left=100+120*(i-1)+"px"; btn.addEventListener('click', function(){window.alert(i-1+""+nmol[i-1]);}); |
创建的按钮很好,但addEventListener事件函数中的参数似乎根本没有增量。 打印时我留下来值1。
谁能解释我为什么?
谢谢
修改它,以便在循环中有一个内部闭包
1 2 3 4 | (function(index){ btn.addEventListener('click', function(){window.alert(index-1+""+nmol[index-1]);}); } )(i); |
发生的事情是
但是,当您将一个函数括在括号中时,您实际上是在创建一个闭包,它将变量的范围缩小到括号内。
看到它在这里工作