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

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

新規登録して質問してみよう
ただいま回答率
85.48%
イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

JavaScript

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

Q&A

1回答

770閲覧

JavaScriptのclickイベントを使った簡単な問題

退会済みユーザー

退会済みユーザー

総合スコア0

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

JavaScript

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

0グッド

0クリップ

投稿2021/04/16 17:11

前提・実現したいこと

JavaScriptのclickイベントを使った問題を、if文による条件分岐も使用して作成したいです。

3択問題で、正解をクリックすると「正解」、間違いをクリックすると「ハズレ」と表示させたいです。

3つの選択肢にはidを指定し、addEventListenerを使用して作成したいです。

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

おそらく、if文の条件式が正しくないのが原因だと思うのですが、「1番がクリックされた時」という条件式をどう書けばいいのかがわかりません。

例えば下のままだと、最初の条件がtrueになる

該当のソースコード

var correct = '正解'; var mistake = '外れ'; var result = document.getElementById('result'); var elem1 = document.getElementById('element1'); var elem2 = document.getElementById('element2'); var elem3 = document.getElementById('element3'); if('ここがわからない'){ elem3.addEventListener('click', function(){ result.innerHTML = correct; }, false); } else if('ここがわからない') { elem2.addEventListener('click', function(){ result.innerHTML = mistake; }, false); } else if('ここがわからない') { elem1.addEventListener('click', function(){ result.innerHTML = mistake; }, false); }

試したこと

var elem1 = document.getElementById('element1'); var elem2 = document.getElementById('element2'); var elem3 = document.getElementById('element3');

ここで選択肢を1つずつ取得しています。

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

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

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

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

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

m.ts10806

2021/04/16 21:22

>if文の条件式が正しくないのが原因 自身で書いたコードを提示してください。 本当に「ここが分からない」と書いたのですか?
m.ts10806

2021/04/16 21:22

あと、HTMLも提示してください
ku__ra__ge

2021/04/16 23:36

そもそもプログラムの構成がおかしいので'ここがわからない'に入るべき正しい内容は存在しません。(どんな内容を入れても正しい動作にはできない) addEventListenerがどのような機能を実現する処理なのか再確認してコードを組み直しましょう。
退会済みユーザー

退会済みユーザー

2021/04/17 02:20

ありがとうございます。 html <body> <h3>信号の止まれは何色でしょうか?</h3> <p id="element1">1:青</p> <p id="element2">2:黄色</p> <p id="element3">3:赤</p> <p id="result"></p> JavaScriptは書き直して現在このようになっています var correct = '正解'; var mistake = '外れ'; var result = document.getElementById('result'); var elem1 = document.getElementById('element1'); var elem2 = document.getElementById('element2'); var elem3 = document.getElementById('element3'); elem3.addEventListener('click', function(){ if(elem3.id === 'element3'){ result.innerHTML = correct; } else { result.innerHTML = mistake; } }, false); 上記でわからない点は、選択肢のどれをクリックしても elem.addEventListener('click', function() を機能させる方法(上のままだと選択肢3を押した時しか機能しないのはわかります) 今はif文の条件式に elem3.id === 'element3' と入れていますが、「選択肢のどれかがクリックされたらif文に進む」ようにすればいいのか、「if文の条件式に、もし選択肢1がクリックされたら〜、もし選択肢2が〜」のように分岐させればいいのかがよくわからないです。 よろしくお願い致します。
退会済みユーザー

退会済みユーザー

2021/04/17 02:27

選択肢のどれかがクリックされたら(addEventListenerを使って){ if(){ } else{ }, false); なのか、 if(選択肢1がクリックされたら){ } else if(選択肢2がクリックされたら){ } else if(選択肢3がクリックされたら){ } 上のどっちかにすればいいのかなと考えていますが、最初の方なら押された選択肢を判別する方法がわからず、後の方なら()内に書く条件式がどのようになるのかがわからないです。
guest

回答1

0

質問者さんが必要としている知識は、以下のように切り分けられると思います。

  1. クリックされたときに実行される処理内で、何がクリックされたのかを取得する方法
  2. element1 または element2 または element3 がクリックされたときに実行される処理を登録する方法
  1. クリックされたときに実行される処理内で、何がクリックされたのかを取得する方法

イベントが発生した要素は、以下のようにイベントが起きたときに実行される関数の引数から取り出すことができます。

javascript

1var elem1 = document.getElementById('element1'); 2elem1.addEventListener('click', function(eventArgument){ 3 var clickedElement = eventArgument.currentTarget; 4 alert(clickedElement.id); 5}, false);
  1. element1 または element2 または element3 がクリックされたときに実行される処理を登録する方法

このような処理を行いたいときは、まずイベント発生時に実行する関数(自分で見て分かりやすい名前が良いですが、ここでは仮にsampleEventHandlerという名前の関数としましょう)を定義します。
そして、
element1がクリックされたときにsampleEventHandlerを実行する
element2がクリックされたときにsampleEventHandlerを実行する
element3がクリックされたときにsampleEventHandlerを実行する
……という登録をしてやるとよいです。

javascript

1function sampleEventHandler() { 2 alert('イベントが発生しました'); 3} 4 5var elem1 = document.getElementById('element1'); 6var elem2 = document.getElementById('element2'); 7var elem3 = document.getElementById('element3'); 8 9elem1.addEventListener('click', sampleEventHandler, false); 10elem2.addEventListener('click', sampleEventHandler, false); 11elem3.addEventListener('click', sampleEventHandler, false);

投稿2021/04/17 03:15

編集2021/04/17 03:18
ku__ra__ge

総合スコア4524

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

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

退会済みユーザー

退会済みユーザー

2021/04/17 08:26

ありがとうございます。 1番の、.currentTargetというのを調べてみたのですが、ここでどのような役割をしているのかが理解できませんでした、すみません。 2番は、説明してくださったことが理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問