• ベストアンサー

オブジェクト名に変数を使いたい

<form id="form1" name="form1" method="post" action=""> <label for="q1-1"><input id="q1-1" name="q1" type="radio" value="1" />あ</label> <label for="q1-2"><input id="q1-2" name="q1" type="radio" value="0" />い</label> <label for="q1-3"><input id="q1-3" name="q1" type="radio" value="0" />う</label> <label for="q1-4"><input id="q1-4" name="q1" type="radio" value="0" />え</label> <label for="q2-1"><input id="q2-1" name="q2" type="radio" value="1" />あ</label> <label for="q2-2"><input id="q2-2" name="q2" type="radio" value="0" />い</label> <label for="q2-3"><input id="q2-3" name="q2" type="radio" value="0" />う</label> <label for="q2-4"><input id="q2-4" name="q2" type="radio" value="0" />え</label> </form> ============================================================ 上のような4択の問題が10問あります。 これを採点して合計点数を表示させたいと思っていますが、 下記のようにfor文を使う際、オブジェクト名の、"q1"の"1"というところに変数nを使いたいのですが、やり方がわかりません。 ============================================================ for(var n=0;n<10;n++){ var length=document.form1.q1.length; for(var i=0;i<length;i++){ var checked=document.form1.q1[i].checked; if(checked==true){ ans = i; } } var value=document.form1.q1[ans].value; } ============================================================ いろいろ調べてみましたが、うまくいかず固まっております。 どなたかご教授いただけませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

元の命題のとおり"q"に数字をつけたラジオボタンをチェックするなら こんな感じでしょうか? valueの値を足せば、加重配点などもできそうですね。 <script> function check(f){ var count=0; for(var i=0;i<f.length;i++){ if(f[i].type=="radio" && f[i].checked && f[i].name.match(/^q[0-9]+$/)) count+=parseInt(f[i].value); } alert(count); } </script> <form id="form1" name="form1" method="post" action=""> <p>Q1: <label for="q1-1"><input id="q1-1" name="q1" type="radio" value="1" />あ</label> <label for="q1-2"><input id="q1-2" name="q1" type="radio" value="0" />い</label> <label for="q1-3"><input id="q1-3" name="q1" type="radio" value="0" />う</label> <label for="q1-4"><input id="q1-4" name="q1" type="radio" value="0" />え</label> </p> <p>Q2: <label for="q2-1"><input id="q2-1" name="q2" type="radio" value="1" />あ</label> <label for="q2-2"><input id="q2-2" name="q2" type="radio" value="0" />い</label> <label for="q2-3"><input id="q2-3" name="q2" type="radio" value="0" />う</label> <label for="q2-4"><input id="q2-4" name="q2" type="radio" value="0" />え</label> </p> <p>Q10: <label for="q10-1"><input id="q10-1" name="q10" type="radio" value="1" />あ</label> <label for="q10-2"><input id="q10-2" name="q10" type="radio" value="0" />い</label> <label for="q10-3"><input id="q10-3" name="q10" type="radio" value="0" />う</label> <label for="q10-4"><input id="q10-4" name="q10" type="radio" value="0" />え</label> </p> <p>QX: <label for="qx-1"><input id="qx-1" name="qx" type="radio" value="1" />あ</label> <label for="qx-2"><input id="qx-2" name="qx" type="radio" value="0" />い</label> <label for="qx-3"><input id="qx-3" name="qx" type="radio" value="0" />う</label> <label for="qx-4"><input id="qx-4" name="qx" type="radio" value="0" />え</label> (これは検索されない) </p> <p> <input type="button" value="check" onclick="check(this.form)"> </form>

sr-ki
質問者

お礼

お返事遅くなり申し訳ありません! 参考にさせていただきうまくいきました! とても助かりました ありがとうございました!

その他の回答 (4)

回答No.4

var r = document.getElementById('form1').getElementsByTagName('INPUT'); var T = 0, c = 0, o; while (o = r[c++]) if ('radio' == o.type && o.checked) T += o.value - 0; alert(T);

sr-ki
質問者

お礼

早速ご回答ありがとうございます! 参考にさせていただき、思っていたとおりにできました。 というか、ずっと簡潔になって最高です。 こういう方法もあったんですね。。 javascript初心者なんでとっても勉強になりました。 また機会があればよろしくお願いします。

  • kura07
  • ベストアンサー率50% (30/59)
回答No.3

>>2です。iと1を打ち間違えました。 var value = document.form1["q"+i][ans].value;

  • kura07
  • ベストアンサー率50% (30/59)
回答No.2

eval()はあんまり使わないほうが良いような気もしますが… var value = document.form1["q"+1][ans].value; IE、Google Chromeで確認済み

sr-ki
質問者

お礼

早速ご回答ありがとうございます! 参考にさせていただきました。 助かりました。 また機会があればよろしくお願いします。

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.1

eval() を使うとできるはずです。 イメージはこんな感じ。 実際に試してるわけではないので、細かい不具合は修正願います。 var value=eval("document.form1.q" + i + "[ans].value");

sr-ki
質問者

お礼

早速ご回答ありがとうございます! 参考にさせていただきました。 助かりました。 また機会があればよろしくお願いします。

関連するQ&A

専門家に質問してみよう