使用addEventListener在javascript中设置单独的函数参数以具有唯一的ID

使用addEventListener在javascript中设置单独的函数参数以具有唯一的ID,javascript,javascript-events,Javascript,Javascript Events,我有一个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);}, f

我有一个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);
}
所以我需要鼠标事件对象

当前代码确实生成元素,但每次单击都会调用与参数id相同的函数(10作为id发送,鼠标事件工作正常)


任何想法都很感激!提前感谢。

这是因为创建了一个保留for循环中最后一个
i
值的闭包,您需要更改此行:

p.addEventListener("click", function(e){popup(e, i);}, false);
要解决此问题,请首先声明一个新函数:

function createfunc(i) {
    return function(e) {popup(e, i); }
}
然后将该行更改为:

p.addEventListener("click", createfunc(i), false);

查看有关此技术的更多信息。

谢谢您的回答!我希望您的第一个解决方案(在编辑之前)能起作用,因为它简单得多,但我很高兴这一个能起作用。:)注:谢谢你的更多信息链接。这真的很有帮助@不客气,我不确定我的第一个答案是否有效。
p.addEventListener("click", createfunc(i), false);