Javascript 防止表单在jQuery验证插件中提交';s submitHandler函数
我正在使用jQuery和验证插件 我想防止表单在通过ajax完成验证和提交过程后提交。 我有以下代码: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
$("#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
}
});