• 締切済み

Firefoxのdisabledプロパティのバグ?

複数のラジオボックスがあり、すべてのラジオボタンで 「YES」がチェックされた時にだけ、submitボタンが 有効になるようJavaScriptで制御できればと思ってます。 素人ながら以下のようなJavascriptにしたところ、 IEやSafari、Chromeでは意図した通り動作しましたが、 ただFirefoxのみボタンがdisabledになったまま有効になりませんでした。 解決策がわかる方がいらっしゃればご教授お願いできればと思います。 よろしくお願い致します。 <script type="text/javascript"> <!-- function check() { if (form1.radio1[0].checked && form1.radio2[0].checked && form1.radio3[0].checked) { form1.send.disabled = false; } else { form1.send.disabled = true; } } ; //--> </script> <form name="form1"> <input type="radio" name="radio1" value="1" >YES <input type="radio" name="radio1" value="2">NO <input type="radio" name="radio2" value="1">YES <input type="radio" name="radio2" value="2">NO <input type="radio" name="radio3" value="1" onClick="check()">YES <input type="radio" name="radio3" value="2">NO <input type="button" name="send" value="GO" onclick="location.href='hogehoge.html'" disabled="disabled"> </form>

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

直接の回答ではありませんが… ご提示のものだと、radio3のYESをクリックしたタイミングでしかチェックが走らないので、 ・先にradio3をYESにした後で全部YESにしても、ボタンが有効にならない。 ・一度YESをそろえてボタンが有効になると、NOに設定し直してもボタンは押せる。 という状態になっていますけれど、それは意図の通りなのでしょうか? あと、HTMLソースでサブミット機能を初期状態に不可に設定してしまうと、スクリプトオフの環境では決してボタンが押せないことになってしまいます… 一般的にはこんなふうになるのではないだろうか。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head><title>sample</title> <meta http-equiv="Content-Script-Type" content="text/javascript"> </head> <body> <form name="form1" action="hogehoge.html" onclick="check(event, this);"> <p> <input type="radio" name="radio1" value="1" >YES <input type="radio" name="radio1" value="2">NO <input type="radio" name="radio2" value="1">YES <input type="radio" name="radio2" value="2">NO <input type="radio" name="radio3" value="1">YES <input type="radio" name="radio3" value="2">NO <input type="submit" name="send" value="GO"> </p> </form> <script type="text/javascript"> <!-- function check(evt, f){ var elm = f.elements, flag = true; for(var i=1; i<4; i++) flag = flag && elm["radio"+i][0].checked; elm["send"].disabled = !flag; } document.forms["form1"].elements["send"].disabled = true; //--> </script> </body> </html> 原因やcheckboxの数に関してはNp1様のご指摘の通りかと。

回答No.1

しょうりゃくしたかたちだからです。 そもそも、checkbox が、3こでよいのでは? <!DOCTYPE html> <html lang="ja"> <head>  <title></title>  <meta charset="utf-8"> </head> <body> <form name="form1"> <input type="radio" name="radio1" value="1" >YES <input type="radio" name="radio1" value="2">NO <input type="radio" name="radio2" value="1">YES <input type="radio" name="radio2" value="2">NO <input type="radio" name="radio3" value="1" onClick="check()">YES <input type="radio" name="radio3" value="2">NO <input type="button" name="send" value="GO" onclick="location.href='hogehoge.html'" disabled="disabled"> </form> <script> function check() { var es = document.forms['form1'].elements; es['send'].disabled = ! (es['radio1'][0].checked && es['radio2'][0].checked && es['radio3'][0].checked) } </script>

関連するQ&A

専門家に質問してみよう