3

チェックボックス フィールドで構成されるフォームがあります。フォームの送信時に、少なくとも 1 つのチェックボックスがオンになっているかどうかを確認する必要があります。

htmlコード

<form id="form_check" class="form" action="/path/to/some/url" method="POST">
  {% for field in fields %}
     <div class="check_fields">  
         <input class="select-unselect" type="checkbox" name="invite" value="">
          {{field}}
     </div>
  {% endfor %} 
     <input type="submit" class="btn btn-primary" value="Submit" onsubmit="atleast_onecheckbox()"/>
</form>

JavaScriptコード

<script type="text/javascript">
    function atleast_onecheckbox()
            {
             var value = $("[name=invite]:checked").length > 0);
                 alert(value) ;      
                 if (!value)
                      {
                    alert("Please.....");
                       }
            }   
</script>    

そのため、送信ボタンをクリックすると、フォームは に記載されている URL にリダイレクトされますがaction、javascript 関数にヒットすることさえありません。atleast_onecheckbox()

上記のコードのどこが間違っているのですか、誰でも上記のコードを機能させることができますか?

4

2 に答える 2

5

JavaScript イベントを HTML に直接アタッチするべきではありません。これは非常に悪い習慣です。代わりに、jQuery を使用するため、jQuery イベント ハンドラを使用する必要があります。

$('#form_check').on('submit', function (e) {
  if ($("input[type=checkbox]:checked").length === 0) {
      e.preventDefault();
      alert('no way you submit it without checking a box');
      return false;
  }
});

( http://jsbin.com/IXeK/1/edit )

本当に HTML の onsubmit を使いたいのなら、それが悪いとしても (考えただけで気分が悪くなるはずです)、onsubmit は次のようにする必要があります。

  • フォームに添付
  • 送信時にデフォルトのイベントを防止する必要があります
  • false を返す

だから、すべてをカバーしています。ここのようにhttp://jsbin.com/IXeK/2/edit

<form onsubmit="return atleast_onecheckbox(event)" id="form_check" class="form" action="/path/to/some/url" method="POST">
 <div class="check_fields">  
     <input class="select-unselect" type="checkbox" name="invite" value="">
 </div>
 <input type="submit" class="btn btn-primary" value="Submit" />

function atleast_onecheckbox(e) {
  if ($("input[type=checkbox]:checked").length === 0) {
      e.preventDefault();
      alert('no way you submit it without checking a box');
      return false;
  }
}
于 2013-08-22T11:30:26.533 に答える
0
<script type="text/javascript">
function atleast_onecheckbox()
        { 
         if (document.getElementById('invite').checked) {
            alert('the checkbox is checked');
            }
         else
           {
          alert("please check atleast one..");
          return false;
           }    
        }   
 </script>    
 <form id="form_check" class="form" action="/path/to/some/url" method="POST">
  {% for field in fields %}
  <div class="check_fields">  
     <input class="select-unselect" type="checkbox" name="invite" id="invite" value="">
      {{field}}
 </div>
 {% endfor %} 
 <input type="submit" class="btn btn-primary" value="Submit" onclick=" return  atleast_onecheckbox()"/>
</form>
于 2013-08-22T10:45:23.180 に答える