HTMLの読み込みが終わってなくてJavaScriptでnullエラーが出てしまうことがちょくちょくある。
かといってHTMLの末尾にJavaScriptを書くと可読性がよろしくない。
その対処法。
nullエラーが出る状況
下記のようにhead内でh2の値を取得しようとすると、まだ読み込まれてなくてエラー出る。
Uncaught TypeError: document.getElementById(...) is null
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>サイトタイトル</title>
<script>
const h2Value = document.getElementById('h2Title').value;
</script>
</head>
<body>
<section>
<h2 id="h2Title">タイトル</h2>
<p>コンテンツの内容</p>
</section>
</body>
</html>
onloadで対策
簡単なのはこれ。
参考
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>サイトタイトル</title>
<script>
function firstscript(){
const h2Value = document.getElementById('h2Title').value;
}
</script>
</head>
<body onload="firstscript();">
<section>
<h2 id="h2Title">タイトル</h2>
<p>コンテンツの内容</p>
</section>
</body>
</html>
onloadは重複不可だし既に使われていることが多い
onloadは複数書くと、上書きされて最後に書いたonloadだけが動作してしまう。
addEventListener('load', )なら複数でも問題ないけど未だに古いバージョンのIEに縛られている現場が結構あってaddEventListener()未対応なことがある。
社内システムを互換表示設定にした上でIEで使うところ結構あるのよね。
参考
【JavaScript】onloadイベントは複数回使用できない!対処法を解説 | ウェブカツBLOG
古いバージョンのIEでaddEventListner使えない時
onloadが使われていなければラッキー。
使われているなら、既存のonloadイベントに追記するか、HTMLの末尾に書くしかないのかなあ。