前提・実現したいこと
htmlに3つの要素を作成し、各要素にonclickを設定し、かつ、javascriptのif文を使うという条件つきで、clickする要素に応じて、alertを表示させたいと考えています。具体的には、3つ目の要素でclickした時には”正解”を、1,2番目の要素をクリックした時には”不正解”が表示されるようにしたいです。
発生している問題・エラーメッセージ
①三つ目の要素をクリックした場合に、以下のようなエラーが出る場合と、エラーが発生せずに
"正解"のアラートが表示される場合がある。
if_practice.js:4 Uncaught TypeError: Cannot set property 'id' of null at color (if_practice.js:4) at HTMLHeadingElement.onclick (if_practice.html:13)
②一つ目及び二つ目の要素をクリックした場合、"正解"のアラートが表示される。
該当のソースコード
javascript
1"use strict"; 2function color(){ 3 var right = document.getElementById("white"); 4 right.id = "clicked"; 5} 6function message(){ 7 //var notClicked = document.getElementsByClassName("white"); 8 var notClicked = document.querySelector(".white"); 9 if(notClicked.id === "clicked"){ 10 alert('正解'); 11 }else{ 12 alert('不正解'); 13 } 14}
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>JavaScriptの</title> 7</head> 8<body> 9 <p>JavaScriptの条件分岐</p> 10 <h1>雲の色は何色でしょうか(該当するものをクリック)。</h1> 11 <h2 id="red" onclick="message()">1.赤</h2> 12 <h2 id="yellow" onclick="message()">2.黄</h2> 13 <h2 id="white" class="white" onclick="color();message();">3.白</h2> 14 <script src="js/if_practice.js"></script><!--//フォルダ名jsの中のtask_if_1.jsというファイルを読み込む--> 15</body> 16</html>
試したこと
元々querySelectorではなく、getElementsByClassNameを使っていましたが、
getElementsByClassNameですと要素そのものを取得できないというご指摘を受けたことから、
今回はquerySelectorを使うべきなのではないかと考え、使ってみました。
何度か要素をクリックして動作確認したところ、前述の問題点である、3つ目の要素でエラーが出力される場合とされない場合があるということに気がつきました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。