javascript - 无法读取未定义的属性“添加事件侦听器”
问题描述
我设法做了一个 for 循环,以便我可以选择 div 中的所有按钮并将事件侦听器附加到它们。尽管网站上一切正常,但我在控制台中遇到错误:
“未捕获的 TypeError:无法读取 index.js:5 处未定义的属性‘addEventListener’”
我可以以某种方式修复此错误吗?
这是我在js中的代码:
let div = document.querySelector(".set");
let nodeList = div.querySelectorAll("button");
for (let i = 0; i <= nodeList.length; i++){
nodeList[i].addEventListener("click", function(){
alert("I got clicked!")
});
}
解决方案
您超出了列表 - 更改
<=
为<
此处:i <= nodeList.length
所有最新的浏览器(Edge < 17 除外)都可以使用 forEach:
document.querySelectorAll(".set button").forEach(but => but.addEventListener(...))
你最好不要循环而是委托
document.querySelector(".set").addEventListener("click", function(e) {
const tgt = e.target;
if (tgt.tagName === "BUTTON") { // assuming buttons have no other tags inside
alert("I got clicked!");
}
});
|| tgt.parentNode.tagName==="BUTTON"
如果您的按钮包含标签,您可以通过添加到测试来测试上一级
推荐阅读
- eclipse - 如何在 Eclipse 中安装 Erlide 时修复“收到致命警报:handshake_failure”错误
- python - 使用 JSON 键创建数据框
- c# - C# 使用公钥和私钥创建 RSA256 JWT
- mysql - 在开始新的更改操作之前缺少逗号。(靠近“字符集”)
- c++ - 是否存在 x + 1 == x 的 float 类型的值 x?
- vb.net - 无法在即时模式下访问 Word 类的类成员
- java - PageFactory 初始化问题
- python - 如何捕获异常 MaxRetryError?
- c++ - ESP8266 I2C 从机不确认数据
- python - 覆盖子 __init__ 函数的正确方法是什么?