- ベストアンサー
HTMLデータを出力する方法について
- JavaScriptを使って5択の問題が出題できるコンテンツを作成していますが、選択した番号や正解不正解を同じフォーム上に表示させたいです。
- test02.htmlで動作しない問題が発生しており、ボタンを押しても反応しません。どちらも単体では動作するため、使い方に間違いがある可能性があります。
- 今日一日で解決策が見つからなければ、この質問を投稿するつもりです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは window.onload=function() { document.getElementById("check").onclick = function(){} document.getElementById("check2").onclick = function(){} } でイベントのセットをしているわけですが 同じページにこの2つの問いがあれば『id="check"』『id="check2"』の両方があるためwindow.onload内のスクリプトはすべて実行されます(下の問いとcheck2の方のcheckListのidを変更すればどちらも実行されると思います ですがtest01.htmlの方では『id="check"』の方しかありません そのためdocument.getElementById("check2").onclick = function()の方のセットは行われずスクリプトエラーになります ですが先にdocument.getElementById("check").onclick = function()の方のセットは完了しているのでtest01.htmlの方はボタンを押すとスクリプトが一応実行されます test02.htmlの方では『id="check2"』しかありませんので document.getElementById("check").onclick = function()のセットが出来ない為スクリプトエラーになります そうなるとその後にあるdocument.getElementById("check2").onclick = function()も実行されていないことになり『id="check2"』のonClickがセットされていないのでボタンを押しても何の反応もありません 同じスクリプトを使っているという事は外部ファイルにしているのでしょうか? ・ 空要素 (test01.htmlに)<div id="check2"></div> (test02.htmlに)<div id="check"></div> を追加するか(別に<div>でなくてもid="check"もしくはid="check2"と定義されたものがあればいいです) ・ test01.htmlとtest02.htmlとで別々のスクリプトにするか ・ (test01.htmlに)window.onload=function() { check(); } (test02.htmlに)window.onload=function() { check2(); } として 質問のスクリプトを function check() { document.getElementById("check").onclick = function() { (略) } } function check2() { document.getElementById("check2").onclick = function() { (略) } } のようにしてください
お礼
丁寧な解説有り難うございました。仕事から帰ってきて早速試してみたところうまくできました。window.onload=function() { check(); }のタグを head内に入れfunction check() { document.getElementById("check").onclick = function() { (略) } }と教えていただいた通りにしたところ2つとも動きました! 本当に有難うございました。 これでテストはいくつも作れそうです。 また機会がありました宜しくお願い致します。