1

チェックボックスがチェックされていない場合、bind false を使用してフォームの送信 (送信ボタンのクリックまたは Enter) を警告して防止します。AJAX コールバックでアンバインドする必要がありますが、アンバインドできません。

HTML:

<form action="act.php" onsubmit="formSubmit()" id="TypeForm" name="TypeForm" method="POST">
<label>
<input type="radio" name="Type" value="1">
<span>Type 1</span>
</label>
<label>
<input type="radio" name="Type" value="2">
<span>Type 2</span>
</label>
<input type="submit" name="submit" id="submit" value="Next" />
</form>

Javascript/JQuery:

<script>
  function formSubmit() {
    var self=this;
    $(self).bind('submit', false);
    if ($('#TypeForm').find('input:radio:checked').length == 0) {
      alert('A selection is required.');
    } else {
        $.ajax({
          type: "POST",
          url: "add.php",
          success: function() {
            $(self).unbind();
          }
        });
    }
  }
</script>

よろしくお願いします。

4

3 に答える 3

1

もしかして、イベント名をお忘れ$(self).unbind('submit');ですか?

于 2011-07-04T18:51:47.250 に答える
1

ユーザーが Enter キーを押すか送信ボタンをクリックしたときに、フォームの通常の送信を停止しますか? event次に、 がデフォルト アクションを実行しないようにする必要があります。これを試して:

function formSubmit(event) {
    var self=this;

    event.preventDefault();

    if ($('#TypeForm').find('input:radio:checked').length == 0) {
      alert('A selection is required.');
    } else {
        $.ajax({
          type: "POST",
          url: "add.php",
          success: function() {
            $(self).unbind();
          }
        });
    }
  }

編集: Trevor が言及しているように、jQuery を使用して関数をバインドし、eventさまざまなブラウザーで動作するように適切に設定する必要があります。コードは次のようになります。

$(function() {
  $('#TypeForm').submit(formSubmit);
});

しかし、私はあなたのコードを次のように書き直します(テストされていません):

<script>

  $(function() {
    $('#TypeForm').submit(function (event) {
      var self=this;

      event.preventDefault();

      if ($(this).find('input:radio:checked').length === 0) {
        alert('A selection is required.');
        return false;
      }

      $.ajax({
        type: "POST",
        url: "add.php",
        success: function (data) {
          alert('success, data: ' + data); // optional
          // no need for this: $(self).unbind();
        }
      });
    }
  });

</script>

そしてonsubmit="formSubmit()"、HTML から を削除します。

于 2011-07-04T19:00:49.180 に答える
0

まず、var self=this;

する必要があります

var self=$(this)

次に、$(this) にアクセスするには、フォームを jQuery のイベント モデル内の送信アクションにバインドする必要があります。

例:

$(function() { // short hand document ready call
   $('form-name').submit(function(formSubmit());
}

また、なぜバインドを解除したいのですか?

于 2011-07-04T18:55:21.607 に答える