0

フォームを送信する前に、少なくとも 1 つのチェックボックスがオンになっているかどうかを確認したいのですが、コードは次のとおりです。

<script type="text/javascript">
function validate() {
    if (document.getElementById('checking').checked) {
        alert("checked");
    } else {
        alert("You didn't check it! Let me check it for you.")
    }
}
</script>

<?php foreach (..... ) : ?>

<form name="frm1" id="frm1" method="post" action="next.php" >
...
<input type="checkbox" value="" class="chk"  id="checking"/>
...
 <a href="#" onclick="$(this).closest('form').submit(); validate();"  id="add_view" ><img src="/submit.png"></a>

....

</form>

私はそれが好きでしたが、私にはうまくいかないようです.メッセージが表示されますが、同時に、少なくとも1つのチェックボックスがオンになっていることを確認するのに十分ではありませんか?

4

2 に答える 2

0

Onclick は、検証と送信の両方のイベントを発生させています。たとえば、送信部分を検証スクリプト内に配置し、検証が成功した場合にのみフォームを送信できます。

編集:より完全なコードサンプルを投稿する

<html>
  <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  </head>
  <body>
    <script type="text/javascript">
    function validate() {
      if ($('#checking').is(':checked')) {
        $('#frm1').submit();
      } else {
        alert("You didn't check it! Let me check it for you.");
        $('#checking').attr('checked', true);
      }
    }
    </script>

    <form name="frm1" id="frm1" method="post" action="next.php" >
      <input type="checkbox" value="" class="chk"  id="checking"/>
      <a href="#" onclick="validate(); return false;" id="add_view"><img src="/submit.png"></a>
    </form>
  </body>
</html>

また、ユーザーは FireBug などのツールを使用して実行時にページの HTML/JavaScript を簡単に変更し、無効なデータを送信できるため、まだ存在しない場合はサーバー側の検証を追加することも検討する必要があります。

于 2013-11-09T22:27:09.193 に答える
-1

元の回答で、「...のようなもの」が必要だと提案しました。

完全に機能するソリューションは次のとおりです。追加する必要があったトリックはvalidate、フォームを送信するかどうかを決定できるように、true/false を返す必要があるということでした。

<script type="text/javascript">
  function validate() {
    if (document.getElementById('checking').checked) {
      alert("checked");
      return true;
    } else {
      alert("You didn't check it! Let me check it for you.")
      return false;
    }
  }
</script>


<form name="frm1" id="frm1" method="post" action="next.php" >
  <input type="checkbox" value="" class="chk"  id="checking"/>
  <a href="#" onclick="if(validate()) { $(this).closest('form').submit(); } return false;"  id="add_view" ><img src="/submit.png"></a>
</form>

元の回答: おそらく、クリック ハンドラーに次のようなものが必要です。

if (validate()) { $(this).closest('form').submit(); }

これにより、アラートが閉じられるまで送信を待機させる必要があります。チェックボックスが発生しなかった場合にフォームを送信しないようにする場合は、validate() から true/false を返すことができ、同じことが機能します。

于 2013-11-09T22:27:32.083 に答える