1

如果未选中复选框,我会警告并阻止表单提交(单击提交按钮或 Enter)并绑定 false。我需要在 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)

其次,您必须将表单绑定到 jQuery 事件模型中的提交操作才能访问 $(this)。

例子:

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

还有,为什么要解绑?

于 2011-07-04T18:55:21.607 回答