form.on('submit')不在form.submit()之后但在

时间:2019-05-25 10:33:40

标签: javascript jquery forms form-submit onsubmit

我有一个表单onsubmit触发器和一个确认启动框,单击了表单提交按钮。如果用户说是,请在启动箱中确认我提交表单。我的问题是在用户说“是”之前onsubmit触发,并且在引导箱中调用form.submit()时不再触发。

<html>
  <form>
    <!-- something here -->
    <button type="submit"></button>
  </form>
</html>
<script>
form.on('submit', function(){
  //do something here (I)
}
form.validate({
  submitHandler: function (form) {
      finalConfirm(form); (II)
  }
});
function finalConfirm(form){
  confirm('message', function (confirmed) {
    if(confirmed) form.submit() (III)
  })
}
</script>

我希望//do something here (I)if(confirmed) form.submit() (III)之后执行,或者至少在之前和之后都执行,但是只能在它之前执行(如我在代码中所示)

1 个答案:

答案 0 :(得分:3)

直接在submit元素(DOM元素,而不是jQuery包装器)上调用form 不会触发submit处理程序。 validate插件通过您的submitHandler的参数是DOM元素,而不是它的jQuery包装器(根据this documentation)。

在jQuery包装器上为submit元素调用form 触发submit处理程序(至少是jQuery附带的处理程序)。因此,如果您希望form.submit()中的finalConfirm触发您的提交处理程序,请为其创建一个jQuery包装器:

$(form).submit();

(在那里,或者在submitHandler传递给finalConfirm之前。)

请确保您不会陷入无尽的循环。 :-)