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

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

$("#RequestCreateForm").submit(function (e) { if ($("#RequestCreateForm").validate().checkForm() == false) { return; } e.preventDefault(); //many scripts //How to continue submitting? } 

是否可以在//many scripts之后继续提交表单(使用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").submit() ,脚本将再次运行事件处理程序,并导致无限循环(正如Koen在对已接受答案的评论中指出的那样)。 因此,您需要在提交之前删除事件处理程序:

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

最后一行需要在条件语句中,否则它将永远发生,并否定你的e.preventDefault(); 在顶部。

 $("#RequestCreateForm").submit(function (e) { if ($("#RequestCreateForm").validate().checkForm() == false) { return false; } e.preventDefault(); //many scripts $(this).trigger('submit'); } 
 $("#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(); } 

为避免提交循环,应使用其他变量。

 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的“按钮”(例如 )来模仿提交按钮;
  • 在脚本中我有这样的事情:
 $('#submit').click(function() { if(//validation rules is ok) { $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm } else { return false; } }); 

返回; 与e.preventDefault()相同;

尝试

 $("#RequestCreateForm").trigger('submit');