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

伊斯蒂115

我有一个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发送,鼠标事件可以正常工作)。

任何想法表示赞赏!提前致谢。

易卜拉欣·纳杰尔(Ibrahim Najjar)

发生这种情况是因为创建了一个闭包,该闭包保留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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有特定变量的唯一ID,以使用所述变量在数组中调用函数

使用javascript在具有不唯一ID的html标签标签中显示数组中的文本

如何使用CONCATENATEX或类似函数在POWER BI中获得具有多种类型的唯一ID

如何将具有唯一ID子字符串的内核消息重定向到单独的日志文件中(使用`rsyslog`)?

重构唯一函数具有不同参数的位置

在具有多个唯一开关的函数中使用高级参数集

用户定义的函数具有与strlen()相同的语法,仅使用形式参数以外的一个变量?

Android设置具有唯一ID的闹钟

将参数传递给itertools.groupby()中的键函数以计算键的唯一值

Lodash _.debounce具有单独的队列,用于唯一的参数变体

使用 javascript / node js 运行具有唯一值的函数

通过id或具有O(1)的唯一属性访问JavaScript数组中的对象

如何在Scala中设置绑定的类型参数以使数字具有泛型功能?

计算R中具有唯一值的函数

使用Java 8合并具有唯一ID的两个列表中的对象

融合具有唯一ID的数据框中的列

使用具有唯一ID的Ajax

具有date参数的函数以在数据框上运行

具有多个参数的函数中的Javascript默认参数

为什么传递参数时必须在addeventlistener中具有匿名函数?

如何使 addEventListener 在单独的文件中为 Javascript 函数工作?

您可以使用一等函数将变量设置为等于具有默认参数的函数吗?

PowerBI 中具有唯一 ID 的唯一值的表

将javascript映射与具有两个参数的函数一起使用

在Javascript中将array.map与具有三个参数的函数一起使用

在javascript中,如何传递带有参数的函数以供以后调用?

具有命名函数和参数的addEventListener

返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?

具有唯一ID的SetTimer