【问题标题】:form.on('submit') does not trigger after form.submit() but beforeform.on('submit') 不会在 form.submit() 之后而是之前触发
【发布时间】:2019-05-25 10:33:39
【问题描述】:

我有一个表单提交触发器和一个确认启动框,它显示在单击表单提交按钮上。如果用户说是,在 bootbox 中确认我提交表单。我的问题是在用户说是之前提交触发器,并且当我在引导箱中调用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) 之后执行,或者至少在之前和之后执行,但它只在它之前执行(如我在代码中所示)

【问题讨论】:

    标签: javascript jquery forms form-submit onsubmit


    【解决方案1】:

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

    form 元素的 jQuery 包装器上调用 submit 确实会触发 submit 处理程序(至少,与 jQuery 关联的那些)。因此,如果您希望 finalConfirm 中的 form.submit() 触发您的提交处理程序,请为其创建一个 jQuery 包装器:

    $(form).submit();
    

    (在此处,或在submitHandler 将其传递给finalConfirm 之前。)

    只要确保您不会陷入无限循环。 :-)

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多