jQuery覆盖event.preventDefault()

时间:2012-07-13 14:26:18

标签: javascript jquery javascript-events preventdefault

我有一个表单,在提交时,会通过通常的e.preventDefault()并发送一个ajax请求。但是,如果此ajax请求返回某个条件,我希望正常提交表单。我如何实现这一目标?

// Submit handler
$(".reserveer_form").submit(function(event){
  event.preventDefault();

  $.ajax({
    url: $(this).attr("action"),
    data: $(this).serialize(),
    success: function(data) {
      if($(".messagered",data).length > 0){
        var errors = $(".messagered",data);
        $(".gegevens").before(errors);
      } else {
          // SUBMIT THE FORM!
      } 

    }
  });

})

3 个答案:

答案 0 :(得分:6)

在窗体上调用本机submit方法,以便它不会触发jQuery处理程序。

$.ajax({
    context: this, // <-- set the context.
    url: $(this).attr("action"),
    data: $(this).serialize(),
    success: function (data) {
        if ($(".messagered", data).length > 0) {
            var errors = $(".messagered", data);
            $(".gegevens").before(errors);
        } else {
            this.submit(); // <-- submit the form
        }
    }
});

答案 1 :(得分:1)

由于您的评论表明您更改了表单变量,因此您可以通过检查相同的表单变量来启动submit处理程序。如果更改,只需return true。如果没有,请继续使用当前处理程序。

答案 2 :(得分:-1)

您可以使用submit() method或表格:

$(".reserveer_form").submit(function(event){
  event.preventDefault();
  var form = this,
      $form = $(form);

  $.ajax({
    url: $form.attr("action"),
    data: $form.serialize(),
    success: function(data) {
      var errors = $(".messagered", data);
      if (errors.length > 0){
        $(".gegevens").before(errors);
      } else {
        form.submit();
      }
    }
  });
})

然而,这似乎是一个奇怪的ajax请求。首先,您将表单(序列化,通过ajax)发送到服务器,当响应中没有错误时,您再次发送它?服务器将处理两次(并根据您的表单执行两次)。此外,用户没有收到他的输入已被处理的消息 - 他点击&#34;提交&#34;,它总是需要一段时间才能明显提交(他甚至可以改变一些输入)。