Javascript jQuery:停止提交表单,执行脚本,继续提交表单?

Javascript jQuery:停止提交表单,执行脚本,继续提交表单?,javascript,jquery-selectors,jquery,Javascript,Jquery Selectors,Jquery,我有一个表单,当我提交给他时,我会执行多个脚本。这是我的密码: $("#RequestCreateForm").submit(function (e) { if ($("#RequestCreateForm").validate().checkForm() == false) { return; } e.preventDefault(); //many scripts //How to continue submitting? } 在//许多脚本之后是否可

我有一个表单,当我提交给他时,我会执行多个脚本。这是我的密码:

$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() == false) { return; }

    e.preventDefault();

    //many scripts

    //How to continue submitting?
}
//许多脚本之后是否可以继续提交表单(使用
e.preventDefault();
停止)


谢谢你回来;与e.preventDefault()相同


$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() === false) { 
       e.preventDefault(); 
       //form was NOT ok - optionally add some error script in here

       return false; //for old browsers 
    } else{
       //form was OK - you can add some pre-send script in here
    }

    //$(this).submit(); 
    //you don't have to submit manually if you didn't prevent the default event before
}
试一试

$("#RequestCreateForm").trigger('submit');
当您调用
$(“#RequestCreateForm”).submit()
时,脚本将再次运行事件处理程序,并导致无限循环(正如Koen在对已接受答案的评论中指出的)。因此,您需要在提交之前删除事件处理程序:

$("#RequestCreateForm").on('submit', function (e) {
    e.preventDefault();
    // do some stuff, and if it's okay:
    $(this).off('submit').submit();
});

最后一行必须在一个条件语句中,否则它总是会发生,并否定您的
e.preventDefault()位于顶部。

为避免提交循环,应使用附加变量

var codeExecuted = false;
$('#RequestCreateForm').submit(function(e) {
    ...
    if(!codeExecuted){
        e.preventDefault();
        ...
        functionExecuted = true;
        $(this).trigger('submit');
    }
});

这里的所有解决方案都太复杂或导致javascript错误,我猜是最简单和最清晰的解决方案:

jQuery("#formid").submit(function(e) {
        if( ! (/*check form*/)  ){  //notice the "!"
          e.preventDefault();
          //a bit of your code
        } //else do nothing, form will submit
}); 

下面是我避免无限循环的方法

  • 在表单中,我使用带有id的“按钮”(例如
    )来模拟提交按钮
  • 在脚本中,我有如下内容:

删除e.preventDefault();你会得到你想要的效果。@Scott,这违背了他的代码的目的。@Razor-OP没有提到脚本是否异步完成。如果不是,则不需要
e.preventDefault()。如果是,那么您可以通过
$.ajax
启动它们,并使用完成的回调继续,这仍然意味着您不需要
e.preventDefault()。好的,我明白了。:)但是,如果脚本是同步的(这是假设,因为他没有使用Ajax或其他一些异步技术),那么提交的时间框架将是重要的。在这种情况下,preventDefault()不是必需的吗?如果您删除它,表单将在他的脚本运行之前提交。(如果我错了,请更正)。
return
e.preventDefault()不同<代码>返回
也是
e.stopPropagation()它将终止冒泡的事件<代码>e.preventDefault()仍然允许事件冒泡,从而产生差异。这将创建一个无限循环,从而触发“RangeError:超出最大调用堆栈大小”。根据Bhanu Krishnan的回答,将“return;”更新为“return false;”。而且“==”应该是“==”。这个问题已经被编辑过了-现在可以用了。注意,您不必执行
返回false如果您只为现代浏览器开发:)太好了!如果继续一个已停止的表单是有效的,则会出现此问题。
jQuery("#formid").submit(function(e) {
        if( ! (/*check form*/)  ){  //notice the "!"
          e.preventDefault();
          //a bit of your code
        } //else do nothing, form will submit
}); 
$('#submit').click(function() {
  if(//validation rules is ok)
  {
      $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm
  }
  else
  {
      return false;
  }
});
$("#RequestCreateForm").submit(function (e) {
    if ($("#RequestCreateForm").validate().checkForm() == false) { return; }

    e.preventDefault();

    //many scripts

    // Bypass the jquery form object submit and use the more basic vanilla
    // javascript form object submit

    $("#RequestCreateForm")[0].submit();

}