JavaScript 中 Cannot read property 'addEventListener' of Null 错误
发生“Cannot read property 'addEventListener' of Null”错误的主要原因有两个:
-
在 DOM 中不存在的元素上访问
addEventListener()
方法。 - 在声明 DOM 元素的 HTML 上方插入 JS 脚本标记。
发生错误的主要原因是当我们尝试对未找到的 DOM 元素调用 addEventListener()
方法时。
const btn = document.getElementById('does-not-exist');
console.log(btn); // 👉️ null
// ⛔️ Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')
btn.addEventListener('click', () => {
console.log('btn clicked');
});
我们使用了 DOM 中不存在的 id,因此 getElementById 方法返回 null。
当我们在不存在的 DOM 元素上调用
addEventListener()
方法时,会出现错误“Cannot read property addEventListener of null
”。 要解决此错误,请在调用addEventListener()
方法之前使用 if 语句检查 DOM 元素是否存在。
const btn = document.getElementById('does-not-exist');
console.log(btn); // 👉️ null
// ✅ Check if btn exists before addEventListener()
if (btn) {
btn.addEventListener('click', () => {
console.log('btn clicked');
});
}
// ✅ Using optional chaining (?.)
btn?.addEventListener('click', () => {
console.log('btn clicked');
});
确保传递正确的标识符并添加 if 语句以检查 DOM 元素是否存在。
第二个示例使用可选的链接 ?.
运算符,它会短路而不是抛出错误。
如果 btn 变量的值为 null 或 undefined,则运算符返回 undefined,否则调用该方法。
要解决“Cannot read property addEventListener of null”错误,请确保在正文底部插入 JS 脚本标记。 JS 脚本标签应该放在 HTML 元素声明之后。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<!-- ❌ BAD - Script is run before button is declared ❌ -->
<script src="index.js"></script>
<button id="btn">Submit</button>
</body>
</html>
示例中的 JS 脚本标记位于按钮元素声明之前,因此按钮元素在 index.js 文件中将不可用。
const btn = document.getElementById('btn');
console.log(btn); // 👉️ null
// ⛔️ cannot read properties of null (reading 'addEventListener')
btn.addEventListener('click', () => {
console.log('btn clicked');
});
在声明 HTML 元素之后,我们必须将 JS 脚本标记移动到正文的底部。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<button id="btn">Submit</button>
<!-- ✅ GOOD - HTML is already declared ✅ -->
<script src="index.js"></script>
</body>
</html>
现在 index.js 文件可以访问 DOM 元素,因为它们已经在脚本运行时声明了。
const btn = document.getElementById('btn');
console.log(btn);
// ✅ Works as expected
btn.addEventListener('click', () => {
console.log('btn clicked');
});
按钮元素位于加载 index.js 文件的脚本上方,因此其代码在脚本之前运行。
找到按钮元素并且
getElementById
方法返回实际元素而不是 null,因此我们可以调用该元素的addEventListener
方法并附加一个事件侦听器。
总结
尝试对 DOM 中不存在的元素调用 addEventListener()
方法时,会发生“Cannot read property 'addEventListener' of Null”错误。
当元素不存在于 DOM 中时,存储 null 值的变量通常从 getElementById()
等方法返回。
相关文章
使用 CSS 和 JavaScript 制作文本闪烁
发布时间:2023/04/28 浏览次数:146 分类:CSS
-
本文提供了使用 CSS、JavaScript 和 jQuery 使文本闪烁的详细说明。
在 PHP 变量中存储 Div Id 并将其传递给 JavaScript
发布时间:2023/03/29 浏览次数:69 分类:PHP
-
本文教导将 div id 存储在 PHP 变量中并将其传递给 JavaScript 代码。
在 JavaScript 中从字符串中获取第一个字符
发布时间:2023/03/24 浏览次数:93 分类:JavaScript
-
在本文中,我们将看到如何使用 JavaScript 中的内置方法获取字符串的第一个字符。
在 JavaScript 中获取字符串的最后一个字符
发布时间:2023/03/24 浏览次数:141 分类:JavaScript
-
本教程展示了在 javascript 中获取字符串最后一个字符的方法