アプリ版:「スタンプのみでお礼する」機能のリリースについて

独学で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>

/* ----------------△△△ここまで△△△------------------------ */

よろしくおねがいします。

A 回答 (4件)

> <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>

よろしくお願いします。

補足日時:2013/10/04 13:03
    • good
    • 0
この回答へのお礼

解答いただきありがとうございました。

#2さんの答えで進めていこうと思います。

お礼日時:2013/10/04 15:15

ざっくりこんな感じの処理でどうでしょう?



<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>
    • good
    • 0
この回答へのお礼

お返事ありがとう御座います。

なるほど、selectedを使った方がより明確で具体的で分かりやすいですね。参考にさせていただきます。
ありがとう御座いました。

よろしければ私のやりかたで間違っている部分を指摘してもらえるとうれしいです。

お礼日時:2013/10/04 13:04

#2です



>よろしければ私のやりかたで間違っている部分を指摘してもらえるとうれしいです。

間違っているのは、まさに#1さんが指摘している箇所です。
document.getElementById("q"+i)
とidを指定してタグを指定しようとしていますが、そんなid振られたものはないし
ラジオボタンで同じ名前を持っているので、idで処理はできないです
ラジオボタンのデータを走査して、合致したら処理してbreakというのが
妥当な方法=#2で示したソースです
    • good
    • 0
この回答へのお礼

お返事ありがとう御座います。

なるほど、分かりました。
#2さんの方法でやってみようと思います。

解答いただきありがとうございました。

お礼日時:2013/10/04 15:14

ラジオボタンの場合、どの項目が選択されているかを一発で取得する方法はありません。


(つまり、document.elements['q'+i].valueでは取得できないということです)

なので、#2さんのご回答のようにcheckedプロパティを1つずつチェックすることになります。
    • good
    • 0
この回答へのお礼

お返事ありがとう御座います。

なるほど、分かりました。
#2さんの方法でやってみようと思います。

解答いただきありがとうございました。

お礼日時:2013/10/04 15:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!