Uncaught TypeError: Cannot read properties of null(reading 'click)

1,792 阅读1分钟

解决 - 无法读取Null的属性“点击”

有两个原因造成这个bug:

  1. 对不存在的DOM元素调用click()方法;
  2. 将js脚本标签放在声明DOM元素的HTML上方。

image.png

这是错误发生的示例。

image.png

要解决次错误,请确保你获取的元素id是存在的,如果id不存在会发生错误。

const el = document.getElementById('do-not-exist');
console.log(el); // null

el.click(); // ⛔️ Cannot read properties of null (reading 'click')

若一个值不存在,那么null调用click()方法就会报错。

第二种可能

将js script标签放在body标签的地步。该脚本应在穿件DOM元素后运行。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <!-- ⛔️ BAD - 在按钮存在之前运行脚本 ⛔️ -->
    <script src="index.js"></script>

    <button id="btn" onclick="console.log('Button clicked')">
      Do stuff
    </button>
  </body>
</html>

请注意,JS脚本卫浴button元素的代码上方。意味着脚本文件在button元素可用之前运行。

const el = document.getElementById('btn');
console.log(el); // 👉️ null

// ⛔️ Cannot read properties of null (reading 'click')
el.click();

相反,将js脚本放在底部是正确的。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <button id="btn" onclick="console.log('Button clicked')">
      Do stuff
    </button>

    <!-- ✅ GOOD - -   按钮已经存在 ✅ -->
    <script src="index.js"></script>
  </body>
</html>

现在我们可以访问button内部的元素index.js

const el = document.getElementById('btn');
console.log(el); // 👉️ button#btn

// ✅ works
el.click();

结论

要解决此bug,请在DOM元素可用后运行JS脚本,并确保仅在有效DOM元素上调用该方法。