我有一个for循环,可将元素生成到div中,并且我希望每个元素都调用相同的函数,但具有唯一的ID。
for(var i = 0; i < 10; i++)
{
var p = document.createElement("p");
var t = document.createTextNode("asdf");
p.appendChild(t);
p.addEventListener("click", function(e){popup(e, i);}, false);
document.getElementById("someDiv").appendChild(p);
}
假设函数是:
function popup(e, id)
{
//do stuff with the mouse event and get data according to the id
}
所以我需要鼠标事件对象。
当前代码确实构成了元素,但是每次单击都会调用具有与参数相同的id的函数(将10作为id发送,鼠标事件可以正常工作)。
任何想法表示赞赏!提前致谢。
发生这种情况是因为创建了一个闭包,该闭包保留i
了for循环的最后一个值,您需要更改此行:
p.addEventListener("click", function(e){popup(e, i);}, false);
要解决此问题,请首先声明一个新函数:
function createfunc(i) {
return function(e) {popup(e, i); }
}
然后将该行更改为:
p.addEventListener("click", createfunc(i), false);
检查此问题以获取有关此技术的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句