Uncaught TypeError: nullのプロパティ'addEventListener'を読み取れない 考えられる問題
2022-01-21 05:44:11
まず、何が起こったかを説明します。今日、気まぐれでbサイトを開き、ビデオに従って簡単に小さなデモを作ろうとしたのですが、最初のページのjsを書いた直後からエラーが出るようになりました。 null のプロパティ 'addEventListener' を読み取ることができません。 コードは以下の通りです。
エントリ.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src=". /js/entry.js"></script>
</head>
<body>
<input type="text" id="username" placeholder="Please enter a username">
<button id="enter">Enter the chat room</button>
</body>
</html>
entry.js
;((doc, storage, location) => {
const oUsername = doc.querySelector("#username");
const oEnterBtn = doc.querySelector("#enter");
const init = () => {
bindEvent();
}
function bindEvent() {
oEnterBtn.addEventListener('click', handlerEnterBtnClick, false);
}
function handlerEnterBtnClick() {
const username = oUsername.value.trim();
if(username.length < 6) {
alert('Username must not be less than 6 digits');
return;
}
storage.setItem('username', username);
location.href = 'index.html';
}
init();
})(document, localStorage, location);
そして、ブラウザーを開き、習慣でコンソールを開くと、このようなエラーレポートが表示されました。
その後、entry.jsにアクセスして、何か単語のスペルを間違えていないかよく確認したのですが、長い時間探しても何も見つからず、業を煮やして、続けて最初から一語ずつ見てみましたが、やはり何もエラーは見つかりませんでした。ふと、entry.jsが即時実行の関数として書かれているのを発見し、もしかして、まだページが読み込まれていない段階で、このjsがすでに実行されているから、エラーを報告するのでは?推測にしたがって、entry.jsを変更してみましたが、やはりエラーになりました。そこで、導入した場所への変更を元に戻してみたところ
そして実際に動作しているので、ページの読み込みが終わらないときにこのリスニングjsのコードがすでに実行されていたため、このコードが実行された時点ではリスニングDOMノードが作成されておらず、リスニングエレメントが見つからずnullを返さなければならなかったようです。
解決策は、ページの読み込みが完了するのを待ってからjsコードを実行することです。ネイティブjsでは、スクリプトを一番下に配置します。
関連
-
JSエラーです。Uncaught TypeError: nullのプロパティ'addEventListener'を読み取ることができません。
-
JSON変換エラーです。Uncaught SyntaxError: JSON.parse_乐夫天命兮的客-プログラマーベイビーで位置1に予期しないトークンo。
-
エラー btn.addEventListener は関数ではありません。
-
タイマーのエラーを解決する:Uncaught TypeError: that.setAttribute is not function
-
uncaught typeerror cannot read property 'data' of undefined エラーの理由
-
jquery Datatable パラメータとその使用方法
-
js は、エラー Uncaught TypeError を報告します。nullのプロパティ'appendChild'を読み取ることができません。
-
JSネイティブAjaxとjQuery Ajaxをコード例で紹介します。
-
js ajax 呼び出し 残りインターフェイス
-
jQuery UI ダイアログプラグインのエラーメッセージ。$(this).dialog is not a function and js introduced duplicate solution($(this).dialogは関数ではありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
オブジェクトが存在するにもかかわらず、null のプロパティ 'addEventListener' を読み込むことができません。
-
(解決済み)JSONの1番目の位置で予期しないトークンoが発生した。
-
JSON の位置 1 に予期しないトークン o がある エラーの理由
-
JS error Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
エラー [ERR_HTTP_HEADERS_SENT]: クライアントに送信された後のヘッダを設定できない
-
JS(ネイティブjs、jqメソッド)要素属性(カスタム属性)取得、属性(カスタム属性)削除
-
JSONの位置0にある予期しないトークン エラーが解決されました。
-
Javascriptにおけるdocument.execCommand()の使用法
-
Chromeのレポートフォームの送信エラー、フォームが接続されていないため、フォームの送信がキャンセルされる
-
Uncaught (in promise)は一般的にpormiseの書き方に問題がある。