javascriptの質問です

答えだと思う選択肢のチェックボックスをON にして
採点する ボタンを押し
正解の場合 先頭のチェックボックスがつくように
不正解の場合 先頭のチェックボックスがつかないように
したのですが うまく動きません どこを修正すればいいでしょうか?
http://jsfiddle.net/b5cgdm3d/21/

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/10/23 16:14:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント500pt

こんな感じで、どうでしょうか。
http://jsfiddle.net/ybLubk8a/1/

window.onload = function() {
    document.getElementById("saiten").onclick = function() {
        a()
    };
    function a() {
        for (var f = document.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0], d = 0; d < f.rows.length; ++d) {
            var b = "";
            for (var g = f.rows[d].cells[2].getElementsByTagName("INPUT"), e = 0; e < g.length; ++e) {
                if (g[e].checked) {
                    b += g[e].nextSibling.nodeValue.charAt(0)
                }
            }
            f.rows[d].cells[0].getElementsByTagName("INPUT")[0].checked = b == f.rows[d].cells[5].innerHTML
        }
    }
};

変更した内容です。

  • 13行目の書き方では、正解のときにチェックをつける先頭のチェックボックスを取れない(LABEL に囲まれてない)ので、INPUT タグで探すようにした
  • 13行目で、正解/不正解の判定が逆
  • 選択肢を順番に見ていくループでは、LABEL に囲まれていると正しく拾えないので、INPUT タグでチェックボックスを探して、その次に答えのテキストがある、という判定にした
  • 属性 checked は、論理型なので 0 や 1 を入れたり、判定したりするのが気持ち悪いので、論理型として扱うようにした

問題も増やして確かめてみました。

id:takanii

申し訳ありません 質問文を書き間違えました
正解の場合 先頭のチェックボックスがつかないように
不正解の場合 先頭のチェックボックスがつくように
するにはどこを変えればいいのでしょうか?

2014/10/23 15:56:41
id:a-kuma3

正解の場合 先頭のチェックボックスがつかないように
不正解の場合 先頭のチェックボックスがつくように
するにはどこを変えればいいのでしょうか?

あ、プログラムの方が正しいのでしたか。

    f.rows[d].cells[0].getElementsByTagName("INPUT")[0].checked = b == f.rows[d].cells[5].innerHTML

の b == ~ を、b != ~ に変更です。

    f.rows[d].cells[0].getElementsByTagName("INPUT")[0].checked = b != f.rows[d].cells[5].innerHTML

http://jsfiddle.net/ybLubk8a/4/

2014/10/23 16:01:02
  • id:khazad-Lefty
    途中で挫折したので気づいたことだけ

    * 選択肢のなかでAのみlabelで囲まれている
    * (g[e].checked == 1 だと、labelに入っているチェックボックスは取得できない(label自体をみにいってその配下は見ない)
    * 未確認ですが回答判定の部分は!=ではなくて==では?

    挫折したところまでのを参考までに
    http://jsfiddle.net/b5cgdm3d/49/

    動かない時はこんなかんじでalertを仕込むなりして「どこまで動いているのか」を切り分けるといいと思います。
    http://jsfiddle.net/b5cgdm3d/38/

    #firebugなどjavascriptデバッガがつかえるならもちろんそっちを使ったほうがいいけど

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません