独学でjsをやっているのですが、わからないところがあるので質問させてください。
ラジオボタンを選択し、解答ボタンクリックで、オレンジの欄に解答が出るようなプログラムを書いたのですが、実行されません。どこが間違っているのでしょうか。
/* ---------------- ▽▽▽ここから▽▽▽ -------------------------- */
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>js問題</title>
<style type="text/css">
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,
pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{
margin:0;padding:0;
}
img{ border:0;
}
h1 {
font-size:22px;
}
h2 {
font-size: 12px;
}
#box {
width: 500px;
overflow:hidden; /*子要素にfloatがあり、高さ算出のため使用*/
}
div.box {
width: 150px;
float: left;
background-color: #CCC;
margin-left: 10px;
}
li {
list-style:none;
}
div#ans {
width: 500px;
height: 20px;
clear:both;
margin-top: 20px;
margin-bottom: 30px;
}
div#ans p {
width: 150px;
background-color: #FC6;
margin-left:10px ;
float:left;
}
div#ans_btn {
width: 200px;
clear:both;
margin-left:200px;
}
</style>
</head>
<body>
<h1>Q.問題</h1>
<br />
<div id="box">
<div class="box">
<ul>
<h2>問題その1</h2>
<li><input type="radio" name="q0" value="1">あいうえお</li>
<li><input type="radio" name="q0" value="2">正解</li>
<li><input type="radio" name="q0" value="3">あいうえお</li>
<li><input type="radio" name="q0" value="4">あいうえお</li>
</ul>
</div>
<div class="box">
<ul>
<h2>問題その2</h2>
<li><input type="radio" name="q1" value="1">あいうえお</li>
<li><input type="radio" name="q1" value="2">あいうえお</li>
<li><input type="radio" name="q1" value="3">正解</li>
<li><input type="radio" name="q1" value="4">あいうえお</li>
</ul>
</div>
<div class="box">
<ul>
<h2>問題その3</h2>
<li><input type="radio" name="q2" value="1">正解</li>
<li><input type="radio" name="q2" value="2">あいうえお</li>
<li><input type="radio" name="q2" value="3">あいうえお</li>
<li><input type="radio" name="q2" value="4">あいうえお</li>
</ul>
</div>
</div>
<div id="ans">
<p>問い1答え</p>
<p>問い2答え</p>
<p>問い3答え</p>
</div>
<div id="ans_btn">
<input type="button" value="ここを押すと解答" onClick="saiten()">
</div>
<script type="text/javascript">
var ans = ["2","3","1"];
function saiten(){
var p_node=document.getElementsByTagName("p");
for(var i=0;i<ans.length;i++){
if(ans[i]==document.getElementById("q"+i).value){
p_node[i].innerHTML = "正解";
}else{
p_node[i].innerHTML = "間違い";
}
}
}
</script>
</body>
</html>
/* ----------------△△△ここまで△△△------------------------ */
よろしくおねがいします。
No.1
- 回答日時:
> <input type="button" value="ここを押すと解答" onClick="saiten()">
この行に全角スペースが混じっています。
> if(ans[i]==document.getElementById("q"+i).value){
nameが"q0"になっている要素ならありますが、idが"q0"になっている要素は存在しません。
この回答への補足
お返事ありがとうございます。
ご意見を参考に、全角をとり、
script部分を以下にしましたが、
まだ動いてくれません。
どこがいけないのでしょうか。
<script type="text/javascript">
var ans = ["2","3","1"];
function saiten(){
var p_node=document.getElementsByTagName("p");
for(var i=0;i<ans.length;i++){
if(ans[i]==document.elements['q'+i].value){
p_node[i].innerHTML = "正解";
}else{
p_node[i].innerHTML = "間違い";
}
}
}
</script>
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
ざっくりこんな感じの処理でどうでしょう?
<script>
var ans = ["2","3","1"];
function saiten(f){
for(var i=0;i<ans.length;i++){
var q=f.elements["q"+i];
for(j=0;j<q.length;j++){
if(q[j].checked){
document.getElementById("a"+i).innerHTML = (ans[i]==q[j].value)?"正解":"間違い";
break;
}
}
}
}
</script>
<form>
<h1>Q.問題</h1>
<h2>問題その1</h2>
<div>
<ul>
<li><input type="radio" name="q0" value="1">あいうえお</li>
<li><input type="radio" name="q0" value="2">正解</li>
<li><input type="radio" name="q0" value="3">あいうえお</li>
<li><input type="radio" name="q0" value="4">あいうえお</li>
</ul>
</div>
<div>
<h2>問題その2</h2>
<ul>
<li><input type="radio" name="q1" value="1">あいうえお</li>
<li><input type="radio" name="q1" value="2">あいうえお</li>
<li><input type="radio" name="q1" value="3">正解</li>
<li><input type="radio" name="q1" value="4">あいうえお</li>
</ul>
</div>
<div>
<h2>問題その3</h2>
<ul>
<li><input type="radio" name="q2" value="1">正解</li>
<li><input type="radio" name="q2" value="2">あいうえお</li>
<li><input type="radio" name="q2" value="3">あいうえお</li>
<li><input type="radio" name="q2" value="4">あいうえお</li>
</ul>
</div>
<div>
<p id="a0">問い1答え</p>
<p id="a1">問い2答え</p>
<p id="a2">問い3答え</p>
</div>
<div>
<input type="button" value="ここを押すと解答" onClick="saiten(this.form)">
</div>
</form>
お返事ありがとう御座います。
なるほど、selectedを使った方がより明確で具体的で分かりやすいですね。参考にさせていただきます。
ありがとう御座いました。
よろしければ私のやりかたで間違っている部分を指摘してもらえるとうれしいです。
No.3
- 回答日時:
#2です
>よろしければ私のやりかたで間違っている部分を指摘してもらえるとうれしいです。
間違っているのは、まさに#1さんが指摘している箇所です。
document.getElementById("q"+i)
とidを指定してタグを指定しようとしていますが、そんなid振られたものはないし
ラジオボタンで同じ名前を持っているので、idで処理はできないです
ラジオボタンのデータを走査して、合致したら処理してbreakというのが
妥当な方法=#2で示したソースです
お返事ありがとう御座います。
なるほど、分かりました。
#2さんの方法でやってみようと思います。
解答いただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォントサイズの変更
-
戻ってきた時ツリーメニューが...
-
多階層ドロップダウンのスマホ...
-
pythonのDjangoでHTML内で変数...
-
jqueryのsortableで一部ソート...
-
文字と数字が混在する要素のsor...
-
jqueryアコーディオンのマウス...
-
jQueryセレクタ/複数要素の指...
-
プルダウンメニュー連動後の処...
-
ツリーメニューについて
-
jqueryプルダウンメニュー個別着色
-
javascript テキストエリアを1...
-
MAX関数を使ってからLEFT JOIN...
-
c++std::string型をTCHARに変換...
-
htmlの記述で link rel=styles...
-
JQueryで画像の上で文字を動かす
-
ロールオーバー効果にならない。
-
jspでcssが読み込めない
-
スライダーを実装した場合、ペ...
-
離れた場所にマウスオーバーで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
javascriptでEnterキーをtabキ...
-
クリックした<a>タグのみにClas...
-
チェックボックスに入っている...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
「jQuery」アコーディオンメニ...
-
jQueryで、リンクURLの一致を確...
-
jQueryのeqで最後からn番目以降...
-
ネストされたチェックボックス...
-
javascriptで、クリックしたら...
-
onmouseoverの表示切り替えが上...
-
文字と数字が混在する要素のsor...
-
jQueryでネスト構造の<li>がク...
-
タブメニューを上下に設置
-
<li></li>の数を制限
-
jQuery多層式アコーディオンメ...
-
どの<li><a> が押されたか判別...
-
CSSとJavaScriptを使ってドロッ...
-
複数の画像をランダム(シャッ...
おすすめ情報