javascript - Javascript 中是否有一种简单的方法可以将参数化事件侦听器添加到动态生成的 HTML 元素中?
问题描述
我有一个有序列表,其列表项是使用 Javascript 生成的(因为项目的数量/它们的内容是可变的),我想为每个项目添加一个事件侦听器,具体取决于它是列表的哪个元素 - 所以我想要第 1 个要调用的项目foo(1)
、第 2 个要调用的元素foo(2)
、第 30个要调用的元素foo(30)
等。但是,当前所有元素都以与最后一个元素相同的侦听器结束。我正在使用的代码如下所示:
document.getElementById("mylist").innerHTML = "";
for (i = 0; i < listitems.length; i++) {
var li = document.createElement("li");
li.setAttribute("id", "listitem" + i);
li.addEventListener("click",function(){foo(i)})
document.getElementById("mylist").appendChild(li);
}
解决方案
如果你使用 let 来声明你的 i 变量呢:
document.getElementById("mylist").innerHTML = "";
for (let i = 0; i < listitems.length; i++) {
var li = document.createElement("li");
li.setAttribute("id", "listitem" + i);
li.addEventListener("click",function(){foo(i)})
document.getElementById("mylist").appendChild(li);
}
参考:javascript for循环中的'let'与'var',这是否意味着所有使用'var i =0'的for循环实际上应该是'let i =0'?
推荐阅读
- c# - 从 GridView 的 GridViewColumn 或 GridViewColumn.CellTemplate 获取项目
- c# - 表达式树:字典的 TryGetValue
- php - 在 laravel 中以用户身份登录
- c# - 有没有办法在索引颜色位图(C#)中提取像素的索引?
- android - Android espresso 测试全屏消息
- python - 如何使情节条形图显示堆栈的颜色,而不是迹线
- c++ - gcc中未解决的重载函数类型
- css - 如何在不使用javascript的情况下在css中将带有封面的图像居中
- docker - 使用 Artifactory API 按时间倒序列出 docker 镜像
- java - java表达式计算和运算符优先级