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

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

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

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

Q&A

解決済

2回答

2368閲覧

javascriptの1回目と2回目の違う処理方法

ponzususi

総合スコア1

JavaScript

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

0グッド

0クリップ

投稿2020/08/12 04:41

編集2020/08/12 05:08

前提・実現したいこと

Javascriptでクイズを作成しているのですが問題に間違えた際に1回目と2回目で違うヒントを出す必要があるのですがそれを実行する方法を教えてください

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

if文の条件分岐で答えを間違えた際の1回目と2回目で違うメッセージを出そうと組むと何も反応しなくなります。

該当のソースコード

<!DOCTYPE html> <html> <head> <title>例題1</title> <script type="text/javascript"> function kotae(){ for(i=0;i<2; i++){ if(f.q1.value == "鷲") alert("正解!");} else { if (i<2) alert("不正解!ヒントは怪しい店を別の言い方でいうと?") }else{ alert("不正解!ヒントは大きな鳥です!" ) } } </script> </head> <body> <form name="f"> 次の問題を解きなさい。<p> 間違った場合ヒントは2回出されます。<p> <問題>イカが経営するお店で、ある鳥を飼ったらとても怪しい店になってしまいました。さて、何を飼ったでしょう?<p>

<input name="q1"><p>

<input type="button"value="答え合わせ" onclick="kotae()" >

</form> </body> </html>

試したこと

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

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

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

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

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

maisumakun

2020/08/12 04:45

動かなくなっている方のコードを載せていただけませんか?
kagilinn

2020/08/12 04:45

出来れば動かなくなった版も併せて掲載して欲しかったです. 恐らく動かなくなった版には「あなたが間違えてしまった何か」が含まれているので, 回答側としては間違いの原因を判断する材料となるはずです.
ponzususi

2020/08/12 05:10

動かない方のコードを載せました。まだ初心者でネットで調べて打っただけなので、間違いだらけだとはおもいますが指摘の方お願いします
guest

回答2

0

javascript

1for(i=0;i<2; i++){ 2if(f.q1.value == "鷲") 3alert("正解!");}

ここの最後の中括弧は、forを閉じるものとみなされます。よって、残ったelseifと対応しなくなるので、実行する以前に文法エラーとなっています。

投稿2020/08/12 05:28

maisumakun

総合スコア146018

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

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

maisumakun

2020/08/12 05:29

そして根本的な問題として、回答ボタンが2回押されて動くということはすなわち「 kotae()自体が2回呼び出される」ということなので、kotae()の中でループさせて対応するものではありません。
ponzususi

2020/08/12 05:56

{}の部分について直すことはできました。ありがとうございます。 ご指摘通り、kotae()でのループになっており、これを誤答の部分にあたるelse ifの部分でのカウントにするためにはどのような手直しを加える必要があるのでしょうか、
guest

0

ベストアンサー

全体的に間違っていますが、
エラーの直接の原因は{}の場所がおかしいからです。
上記の文の場合はfor文の終了後にelseが始まるのでエラーになっています。

仮に波括弧の位置を正常に設定したとしてforでループさせて正解チェックはおかしくないでしょうか?
このままですと正解した場合、【正解!】が2回表示されて、不正解の場合は【不正解!ヒントは怪しい店を別の言い方でいうと?】が2回表示されます。
これはfor文で変数iの数字は0,1と変化するのに対してi<2では常にTrueになるからです。

また、希望の動作を考えるに別途現在の誤答をカウントしておき、その誤答の数で分岐させるべきでしょう。

投稿2020/08/12 05:37

gogoweb_ikeda

総合スコア1426

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

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

ponzususi

2020/08/12 05:52

{}の指摘していただいた部分については直せたのですが、正解とは別に誤答のカウントを行うにはどのような書き方をすればよいのでしょうか?
gogoweb_ikeda

2020/08/12 06:01

いくつか方法はあると思いますが、一例として <script> var answer_count = 0; //関数の外でiを初期化 function kotae(){ answer_count ++;//kotaeを実行する毎に1加算 //ここから正解誤答チェックのif文 } で何回回答したかを記憶しておきます。 このケースでは最初にanswer_countを加算していますので一回目の回答をした時点でanswer_countが1になります。
ponzususi

2020/08/13 19:24

返信遅れて申し訳ありません。おかげ様で創造していた通りのクイズを組むことができました! この度は誠にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問