使用 addEventListener 在 JavaScript 中设置单独的函数参数以具有唯一的 ID
Setting separate function parameters in JavaScript with addEventListener to have unique ids
我有一个将元素生成到div 中的 for 循环,我希望每个元素调用相同的函数,但具有唯一的 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
}
所以我需要mouse
事件对象。
此当前代码确实创建了元素,但每次单击都会调用具有相同 id 作为参数的函数(10 作为 id 发送,mouse
事件工作正常)。
任何想法都值得赞赏!
发生这种情况是因为创建了一个闭包,该闭包保留了 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);
有关此技术的详细信息,请查看此问题。
相关文章:
- 如何根据单击的按钮发送id参数
- 将参数中类似形式的ID传递给函数click()
- 如何传递元素's ID作为使用getElementById的函数的参数
- AngularJS-点击对象,访问它's ID&以该ID作为参数激发函数
- HTML span id 作为 JavaScript 函数参数
- 元素id未被接受为函数参数
- 通过函数参数传递id
- 如何使用表行id作为angularjs函数的参数
- 当名称空间在id参数之前声明时,Angular UI路由器停止工作
- 如何添加id和额外的参数到一个放大弹出iframe与youtube视频,所以我可以控制与API youtube播放器
- angular$resource delete-传递id参数
- 无法获取用户 ID 路由参数以在反应路由器中继上工作
- 如何将标签 ID 作为参数传递给 javascript 函数,然后根据需要获得不同标签的文本
- Node.js 在使用 id 参数时在 dpd.get 上部署 404 错误,在 dpd.put 上部署 400 错误
- 如何在 ember.js 中访问路由文件中的 :id 参数
- 使用 addEventListener 在 JavaScript 中设置单独的函数参数以具有唯一的 ID
- 如何在谷歌跟踪代码管理器 noscript 标签中参数化容器 id
- 如何使用点击事件递增网址 ID 参数
- Javascript id 作为 href 中的参数
- 使用FOSJsRoutingBundle和Ajax加载html内容时的延迟(路由参数{id})