LoginSignup
2
0

Uncaught TypeError: Cannot read properties of null のエラー対処

Posted at

エラーが起きた状況

DOM操作を行うjsファイルをhtmlから読み込んだ時、addEventListenerの行に上記のエラー

エラーの意味

直訳で「nullのプロパティは読みこめない」と言う意味。
主に、タイプミスなどで間違ったidによってDOM操作を行った場合に起こるエラー。
しかし、以下に示すように要素の指定自体には問題はなかった。

event.html
//前後省略
<body>
    <button id="output-btn">文字列の出力</button>
    <script src="js/event.js"></script>

    <button id="add-btn">リストの追加</button>
    <ul id="parent-list"></ul>
</body>

event.js
//前後略
const addBtn = document.getElementById('add-btn');
addBtn.addEventListener('click', () => )

原因&解決法

結論から言うと、htmlでscriptタグによりjsファイルを読み込む位置に問題があった。
JavaScriptを直接記入ではなく読み込む場合、scriptタグより下のHTML要素にJavaScriptは干渉できなくなってしまう。
そのため、scriptタグをbodyの一番下に記入するか、scriptタグにdefer属性を記述することで、この問題を解決できる。
以下改善後コード例

event.html
//前後省略
<body>
    <button id="output-btn">文字列の出力</button>
-    <script src="js/event.js"></script>

    <button id="add-btn">リストの追加</button>
    <ul id="parent-list"></ul>
+    <script src="js/event.js"></script>

</body>

event.html
//前後省略
<body>
    <button id="output-btn">文字列の出力</button>
-   <script src="js/event.js"></script>
+    <script type="text/javascript" src="event.js"></script>

    <button id="add-btn">リストの追加</button>
    <ul id="parent-list"></ul>
</body>

おわりに

かなり簡単な内容でしたが、プログラミングのアウトプットの一環としてエラー対処を記録してみました。
誰かのお役に立てれば幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0