jQuery 验证插件:无法在 submitHandler 中调用默认提交

Posted

技术标签:

【中文标题】jQuery 验证插件:无法在 submitHandler 中调用默认提交【英文标题】:jQuery validation plugin: can't call default submit within submitHandler 【发布时间】:2020-11-08 19:26:00 【问题描述】:

我正在尝试使用jquery validation 设置一个表单,它在提交时首先发出一个ajax 请求,然后使用默认提交方法提交。一切正常,除了我无法触发默认提交。我的(简化的)submitHandler:

submitHandler: function(form, event)
    var successful; 
    $.ajax(
        url: myurl,
        dataType: "json",
        type: "post",
        async: false,
        contentType: "application/json",
        data: JSON.stringify(mydata),
        error: function()
            successful = false;
        
    ).done(function(response)
        if (response)
            successful = true;
         else 
            successful = false;
        ;
    );
    if (successful)
        $(form).submit();
    ;

$(form).submit() 会导致“提交循环”,但不会触发默认提交;将其替换为 form.submit() 没有任何作用。

我是否错过了如何正确触发默认提交事件的任何内容?

提前致谢

【问题讨论】:

【参考方案1】:

我会将 ajax 检查的触发与 $(form).submit() 分开。在表单上放置一个“提交”按钮并在 onclick 处理程序中执行 ajax 检查。如果一切正常,则调用 $(form).submit() 无需担心循环。

  <form id="myform"...>
       ....
       <button type="button" id="submitbtn">Submit<button>
  </form>   
  

javascript...

  $("#submitbtn").click(function()  
     // put your ajax call in here
     //then 
    if (successful)
        $("#myform").submit();
    ;
  

【讨论】:

onClick事件会在表单验证之前还是之后触发? onclick由用户点击按钮提交表单触发。但它不是链接到表单的 type="Submit" 按钮 - 它独立于表单。事实上,您可以将其放置在表单之外。如果你想。所有按钮单击都会触发对 onclick 处理程序的调用,然后该处理程序可以根据 ajax 选择是否提交表单。这有意义吗? 确实如此。问题是我希望在表单验证之后但在实际提交之前发出 ajax 请求。因此,我使用 jquery-validation 插件中的 $("form").validate() 方法和 submitHandler 我以为 ajax 正在做验证? 根据文档,您应该使用 form.submit();,而不是 $(form).submit();因为这个递归问题。 jqueryvalidation.org/documentation ...“form.submit() ...触发本机提交事件...而不是验证”

以上是关于jQuery 验证插件:无法在 submitHandler 中调用默认提交的主要内容,如果未能解决你的问题,请参考以下文章

错误放置在 Jquery 验证插件的选择标记顶部

如何通过“选择”插件使用 jQuery 验证?

使用 jquery.inputmask 插件进行 parsley.js 验证

Jquery验证器插件不验证

将 jquery 验证插件添加到 asp.net 4.5

使用 jquery validate 插件成功验证后发送 ajax 请求