質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

451閲覧

JavaScript switchを使う

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/17 12:06

前提・実現したいこと

選択肢をクリックすると決まった答えが返ってくるプログラムをswitchを利用して作成したいです。

よろしくお願い致します。

発生している問題・エラーメッセージ

下記のコードだと、クリックしても何も起きません(検証ツールのconsoleにも何もエラーが出ないです)。

直近で教えていただいたquerySelectorAllのところか、switch文のcaseのところが違うのかなと思うのですが、どこが間違っているのかわかりません。

該当のソースコード

<div class="box"> <p id="one" class="choices" onclick="judge()">1</p> <p id="two" class="choices" onclick="judge()">2</p> <p id="three" class="choices" onclick="judge()">3</p> <p id="four" class="choices" onclick="judge()">4</p> </div> function judge(){ var answer = document.getElementById('answer'); var name = document.querySelectorAll('.box.choices'); switch(name){ case name.id === 'one': answer.innerHTML = '1'; break; case name.id === 'two': answer.innerHTML = '2'; break; case name.id === 'three': answer.innerHTML = '3'; break; case name.id === 'four': answer.innerHTML = '4'; break; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

HTML要素にonclickを書くならこんな感じで

javascript

1<div class="box"> 2 <p id="one" class="choices" onclick="judge(this.id)">1</p> 3 <p id="two" class="choices" onclick="judge(this.id)">2</p> 4 <p id="three" class="choices" onclick="judge(this.id)">3</p> 5 <p id="four" class="choices" onclick="judge(this.id)">4</p> 6</div> 7<hr> 8<div id="answer"></div> 9<script> 10function judge(id){ 11 var answer = document.getElementById('answer'); 12 switch(id){ 13 case 'one': 14 answer.innerHTML = '1'; 15 break; 16 case 'two': 17 answer.innerHTML = '2'; 18 break; 19 case 'three': 20 answer.innerHTML = '3'; 21 break; 22 case 'four': 23 answer.innerHTML = '4'; 24 break; 25 } 26} 27</script>

投稿2021/04/17 12:56

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

name が配列 NodeList だからです。

投稿2021/04/17 12:09

編集2021/04/17 12:38
Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/04/17 12:12

配列に id プロパティはありません。 また、querySelectorAll ではクリックされた要素が特定できません。
Zuishin

2021/04/17 12:14

onclick ではなく、addEventListener を使い、コールバックの引数で判定してください。
退会済みユーザー

退会済みユーザー

2021/04/17 12:34

間違えました。 コールバックはまだ学習していないので、色々調べてみます。 ありがとうございます。
Zuishin

2021/04/17 12:36

配列じゃなくて NodeList でしたね。 querySelectorAll がすぐに調べられる能力があるなら、addEventListener もすぐ調べられるはずです。 だから説明をはしょっています。
退会済みユーザー

退会済みユーザー

2021/04/17 12:42

ありがとうございます。 addEventListner は使ったことがあるのですが、「選択肢の1番がクリックされた時は〜」「選択肢の2番がクリックされた時は〜」というのをswitchのcase部分にどうやって書けばいいのかがわからずに onclickを使用していました。 再度調べて書き直してみます。
Zuishin

2021/04/17 12:43

Event.target.id です。
退会済みユーザー

退会済みユーザー

2021/04/17 13:05

ありがとうございます。 飛ばした問題が幾つかあったのですが、event.target.id を使えば全て解決しそうです。 あとは自力で頑張ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問