开发者问题收集

无法读取 null 的属性“getElementById”

2020-01-17
1833

我正在使用 HTML 和 JS 编写一个简单的 Cat Clicker 应用程序,但是此代码一直出现“无法读取 null 的属性‘getElementById’”错误。

这有什么问题?

<!DOCTYPE html>
<html>
  <head>
    <title>Cat Clicker</title>
    <script>
      'use strict'
      var cat = document.getElementById("cat");
      var counter = document.getElementById("counter");
      var meter = 0;
      function incClick() {
        meter++;
        counter.innerHTML = meter;
      };

      cat.addEventListener('click', incClick);
    </script>
  </head>
  <body>
    <p id="counter" >0</p>
    <img id="cat" src="img/cat1.jpg" alt="cat">
  </body>
</html>
3个回答

我已纠正以下几个问题。您需要使用 document 而不是 document.body 。您需要确保 dom 已完成加载,因此我添加了内容已加载事件监听器。

<!DOCTYPE html>
<html>
  <head>
    <title>Cat Clicker</title>
    <script>
      'use strict'
      document.addEventListener("DOMContentLoaded", function() {
        var cat = document.getElementById("cat");
        var counter = document.getElementById("counter");
        var meter = 0;
        function incClick() {
          meter++;
          counter.innerHTML = meter;
        };

        cat.addEventListener('click', incClick);
      });
    </script>
  </head>
  <body>
    <p id="counter" >0</p>
    <h1 id="cat" src="img/cat1.jpg" alt="cat"></h1>
  </body>
</html>
emd
2020-01-17

您需要在 HTML DOC 正文之后或至少在 HTML 内容的最后添加 <script> 标签。

这是因为 DOM 的运作方式。它会按顺序加载所有内容,因此您的脚本会尝试定位 DOM 中尚不存在的元素

d0rf47
2020-01-17

只需将您的 script 标签放在 body 标签之后,因为我认为问题在于 DOM 在脚本运行后呈现。

您还可以使用 document.getElementById 而不是 document.body.getElementById

Nipun Jain
2020-01-17