前提・実現したいこと
JavaScript初心者です。
JavaScriptの実装演習として4択クイズアプリケーションを制作中です。
ボタンを押すと正誤判定のロジックが回り、正解か不正解か表示するロジックを組んでいます。
発生している問題・エラーメッセージ
もし、4択のボタンのうちテキスト内容(textContent)が同じならば正解、それ以外なら不正解というロジックを各ボタン(4個)それぞれにコーディングしたのですが同じような命令が4つ並んでいたのでwhile文で一つにまとめよう(リファクタリングしよう)と思いコードを修正していたところ以下のエラーが発生してしまいました。
Uncaught TypeError: Cannot read property 'textContent' of undefined at HTMLDivElement.<anonymous> (quiz.js:99)
while文に直す前は正常に動いていたのですが、wihleの中に入れたらエラーになってしまいました。
該当のソースコード
JavaScript
1 const $answer_block_js = document.getElementsByClassName("answer-block"); 2 const $answer_text_js = document.getElementsByClassName("answer-text"); 3 let click_counter = 0; 4/*リファクタリング前(問題なく動いていた) 5 $answer_block_js[0].addEventListener("click",() => { 6 if(quiz_contents[0].correct === $answer_text_js[0].textContent) 7 { 8 window.alert("正解!"); 9 } 10 else 11 { 12 window.alert("不正解!"); 13 } 14 }); 15 16 $answer_block_js[1].addEventListener("click",() => { 17 if(quiz_contents[0].correct === $answer_text_js[1].textContent) 18 { 19 window.alert("正解!"); 20 } 21 else 22 { 23 window.alert("不正解!"); 24 } 25 }); 26 27 $answer_block_js[2].addEventListener("click",() => { 28 if(quiz_contents[0].correct === $answer_text_js[2].textContent) 29 { 30 window.alert("正解!"); 31 } 32 else 33 { 34 window.alert("不正解!"); 35 } 36 }); 37 38 $answer_block_js[3].addEventListener("click",() => { 39 if(quiz_contents[0].correct === $answer_text_js[3].textContent) 40 { 41 window.alert("正解!"); 42 } 43 else 44 { 45 window.alert("不正解!"); 46 } 47 }); 48 49 */ 50 //リファクタリング後(ifの条件でエラー) 51 while(click_counter<$answer_block_js.length) 52 { 53 $answer_block_js[click_counter].addEventListener("click",() => { 54 if(quiz_contents[0].correct === $answer_text_js[click_counter].textContent) 55 { 56 window.alert("正解!"); 57 } 58 else 59 { 60 window.alert("不正解!"); 61 } 62 }); 63 64 console.log($answer_block_js[click_counter]); 65 console.log($answer_text_js[click_counter].textContent); 66 67 click_counter++; 68 } 69 70 console.log(quiz_contents[0].correct); 71
HTML
1 <div class="answer-block px-3 py-2 m-2"> 2 <p class="answer-text"></p> 3 </div> 4 <div class="answer-block px-3 py-2 m-2"> 5 <p class="answer-text"></p> 6 </div> 7 <div class="answer-block px-3 py-2 m-2"> 8 <p class="answer-text"></p> 9 </div> 10 <div class="answer-block px-3 py-2 m-2"> 11 <p class="answer-text"></p> 12 </div>
試したこと
Uncaught TypeError: Cannot read property 'textContent' of undefinedであったので、textContentを取得するものがないのかと思い、
JavaScript
1console.log($answer_block_js[click_counter]); 2console.log($answer_text_js[click_counter].textContent);
を試したのですがどちらも正常に取得出来ました。
どこを修正すればよいのかエラーが直るのか詰まってしまいました。。。
補足情報(FW/ツールのバージョンなど)
どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/16 10:08
2021/03/16 13:38
2021/03/16 15:22