Javascript 防止表单在jQuery验证插件中提交';s submitHandler函数

Javascript 防止表单在jQuery验证插件中提交';s submitHandler函数,javascript,jquery,validation,Javascript,Jquery,Validation,我正在使用jQuery和验证插件 我想防止表单在通过ajax完成验证和提交过程后提交。 我有以下代码: $("#myform").validate({ rules: {...}, submitHandler: function(form) { alert("Do some stuff..."); //submit via ajax return false; //This doesn't prevent the form from submit

我正在使用jQuery和验证插件

我想防止表单在通过ajax完成验证和提交过程后提交。 我有以下代码:

$("#myform").validate({
   rules: {...},
   submitHandler: function(form) { 
      alert("Do some stuff...");
      //submit via ajax
      return false;  //This doesn't prevent the form from submitting.
   }
});
但是,问题是,即使我有一个返回false,提交者仍提交表单语句。我希望防止默认行为并停止表单提交,因为我已经通过ajax提交了表单


在查看了
submitHandler
函数中的ajax代码后,如何阻止代码提交?

您可以在
submit
事件中调用
event.preventDefault()

$("#myform").on("submit", function(event) {
    event.preventDefault();
});

也许您可以在不使用提交按钮的情况下进行外部验证:

if($("#myform").valid()){
    alert("Do some stuff...");
}

您可以通过“jquerywalidate”以非常简单的方式编写代码。

在那里,您可以编写一个函数,该函数将在提交时执行。
请在文档中查找回调。

不幸的是,调用:
submitHandler:function(form){
似乎不接受事件参数,因此唯一的解决方案似乎是一个
return false
语句,如下所示:

...
submitHandler: function(form) {
    //your code
    return false;
},
...

我是这样做的,它的工作方式正是你想要的:

$("#myform").submit(function(e) {
    e.preventDefault();
}).validate({
    rules: {...},
    submitHandler: function(form) { 
        alert("Do some stuff...");
        //submit via ajax
        return false;  //This doesn't prevent the form from submitting.
    }
});
希望对您有所帮助。

正在工作

根据jquery插件验证文档

submitHandler
(默认值:原生表单提交)

下面通过
submitHandler
提交的方法引用自it,应该有效,但实际上不起作用,他们说

用于在表单有效时处理实际提交的回调。获取
表单
提交事件
作为唯一参数。替换默认提交。验证表单后通过Ajax提交表单的正确位置

示例:在有效时,使用jQuery表单插件通过Ajax提交表单

$("#myform").validate({   
   submitHandler: function(form,event) {
     event.preventDefault();
      $(form).ajaxSubmit();   
   } 
});
我在这里写的代码对我有用。 只需调用Validayon插件,不要在验证函数参数中包含
submitHandler

不要使用
submitHandler
提交和阻止,而是使用表单提交的jQuery方法

$("form").validate({});

$(document).on("submit", "form", function (event) {
   event.preventDefault();
   alert("submit"); 
});

我修复了这个问题,一个jQuery验证插件bug的补丁甚至在v1.19.0上都没有修复

$('#save_edit_user').on('click', function () {
    var isValid = $("#edit_user").validate().form() && $("#edit_user").validate().element("#edit_user_email");
    //check current ajax call by $.active 
    //the form is not submitted before 0 ajax is running
    if (isValid && $.active == 0){
     // my save logic

    }
});

submitHandler函数似乎没有使用事件参数。@xEnOn是的,这就是为什么我要单独将
submit
事件添加到表单中。完全这样做,我得到ReferenceError:e未定义e.preventDefault();我也得到ReferenceError:e未定义e.preventDefault(),你知道这到底是什么意思吗?我知道这是一篇老文章,但是如果有人遇到同样的问题,他们应该键入event.preventDefauld()。e是event的快捷方式。如果你想让e工作,就把e放在函数括号之间,就像这个函数(e)。好吧,e不是一个真正的快捷方式,它是一个匿名函数的参数,当表单提交时会调用该函数。如果您收到ReferenceError:e错误消息,则您必须在以下行中键入:$(“#myform”)。提交(函数(e){太好了,这对我帮助很大!这可能有助于向提出以下问题的人解释
event.preventDefault()
的作用,以及它的工作原理(或提供对它的引用)。连接到1.12.0版的源代码,很明显配置
submitHandler
将自动阻止默认行为。此外,如@user3157665所示,处理程序的签名是
submitHandler(表单、事件)
(文档与源代码不同步)。这应该是可接受的答案,因为验证发生在激发请求之前。是否尝试将焦点放在表单输入元素上并按enter键?
$('#save_edit_user').on('click', function () {
    var isValid = $("#edit_user").validate().form() && $("#edit_user").validate().element("#edit_user_email");
    //check current ajax call by $.active 
    //the form is not submitted before 0 ajax is running
    if (isValid && $.active == 0){
     // my save logic

    }
});