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');