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

时间:2011-05-24 16:20:07

标签: javascript jquery-selectors jquery

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

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

    e.preventDefault();

    //many scripts

    //How to continue submitting?
}

是否可以在e.preventDefault();之后继续提交表单(已//many scripts停止)?

谢谢

8 个答案:

答案 0 :(得分:24)

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

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

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

答案 1 :(得分:17)


$("#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
}

答案 2 :(得分:6)

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

    //other scripts

}

答案 3 :(得分:1)

$("#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();

}

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

此处的所有解决方案都过于复杂或导致javascript错误,最简单且 最清晰 解决方案我想:

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

答案 6 :(得分:0)

这是我避免无限循环的方法。

  • 在表单中,我使用带有ID的“按钮”(例如<input type="button" id="submit" value="submit"/>)来模仿提交按钮;
  • 在脚本中我有这样的东西:
$('#submit').click(function() {
  if(//validation rules is ok)
  {
      $("#RequestCreateForm").submit(); //assuming the form id is #RequestCreateForm
  }
  else
  {
      return false;
  }
});

答案 7 :(得分:-1)

返回;与e.preventDefault();

相同

尝试

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