🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

Q&A

解決済

3回答

559閲覧

イベントハンドラーに関しての質問

suepi0915

総合スコア5

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

0グッド

1クリップ

投稿2019/09/05 22:41

編集2019/09/06 01:59

javascript
javascriptについての質問です。
二つのボタンをつくり
1つめのボタンには今日の夕食
2つめのボタンには今日の服装として
ルーレットを作りたいと思います
実際に作ってみたところ1つめのボタンだけ反応したり、2つめのボタンが反応すると答えが1つめの回答になったりなど苦戦しております。
イベントハンドラーについて教科書やwebで勉強をしておりますが、2つを動かすという作業にくせんしております。
プログラム初心者なため、どこを変えたらいいのかソースをお願いしたいです。
ご教授お願い致します。

コード

<html> <head> <title>ルーレットゲーム</title> </head> <body> <input id="dinner_btn1" type="button" value="今日の夕食は?"> <input id="dinner_btn2" type="button" value="今日の服装は?"> <script> document.getElementById( "dinner_btn1" ).onclick =function() { document.getElementById( "dinner_btn2" ).onclick =function() { var x = Math.floor( Math.random()*7 ); var y= Math.floor( Math.random()*3 ); var dinner; var code; if (x === 0) dinner = "鍋"; if (x === 1) dinner = "焼肉"; if (x === 2) dinner = "中華"; if (x === 3) dinner = "彼女の手料理"; if (x === 4) dinner = "イタリアン"; if (x === 5) dinner = "寿司"; if (x === 6) dinner = "麺"; alert(dinner); } if (y === 0) code = "身軽な服"; if (y === 1) code = "パーティ用"; if (y === 2) code = "ゴリゴリ"; alert(code); } </script> </body> </html>

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

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

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

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

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

m.ts10806

2019/09/06 00:37

質問は編集できます。 タイトルにタグを含む必要はありません。 同じJavaScriptについての質問で要件が違う場合タイトルで区別がつきません。 起きている問題や実現したいことに寄せたタイトルにしてください。
guest

回答3

0

ベストアンサー

js

1document.getElementById( "dinner_btn1" ).onclick =function() { 2// 中身 3}

↑と書くと、dinner_btn1のボタンをクリックしたときに、// 中身の部分が実行されます。クリックするまでは実行されません。

なので、

js

1document.getElementById( "dinner_btn1" ).onclick =function() { 2document.getElementById( "dinner_btn2" ).onclick =function() { 3// 略 4alert(dinner); 5} 6// 略 7alert(code); 8}

という↑ご提示のコードは、クリックすると↓以下の部分が実行されます。

js

1document.getElementById( "dinner_btn2" ).onclick =function() { 2// 略 3alert(dinner); 4} 5// 略 6alert(code);

↑これは想定と異なるのではないですか?
おそらく想定しているのは、

js

1// 略 2alert(code);

↑だけだと思います。

なので、解決方法としては、「余分なコードを外に出す」のがいいと思います。

js

1document.getElementById( "dinner_btn1" ).onclick =function() { 2// 略 3} 4document.getElementById( "dinner_btn2" ).onclick =function() { 5// 略 6}

投稿2019/09/06 00:29

Lhankor_Mhy

総合スコア36930

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

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

0

やりたいことが2つ混ぜて書かれているので、それぞれのボタンの処理を分けて書けばいいと思いますよ

投稿2019/09/05 23:26

shirokuma4690

総合スコア154

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

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

0

イベントハンドラーについて教科書やwebで勉強をしております

もし教科書にonclickが書いてあるならそうとう古いそうなので別のものを使ったほうがよいと思います
また値のチェックをifの多様で行うのは非効率なので配列を使うほうが良いと思います

javascript

1 2<script> 3window.addEventListener('DOMContentLoaded', function(){ 4 document.getElementById( "dinner_btn1" ).addEventListener('click',function(){ 5 var dinners=["鍋","焼肉","中華","彼女の手料理","イタリアン","寿司","麺"]; 6 var x = Math.floor( Math.random()*dinners.length); 7 var dinner=dinners[x]; 8 alert(dinner); 9 }); 10 document.getElementById( "dinner_btn2" ).addEventListener('click',function(){ 11 var codes=["身軽な服","パーティ用","ゴリゴリ"]; 12 var y = Math.floor( Math.random()* codes.length); 13 var code=codes[y]; 14 alert(code); 15 }); 16}); 17</script> 18<input id="dinner_btn1" type="button" value="今日の夕食は?"> 19<input id="dinner_btn2" type="button" value="今日の服装は?">

投稿2019/09/06 03:24

yambejp

総合スコア116688

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問