我尝试使用JQuery Validate Plugin构建此验证模块,处理多个表单。所以,我决定将常用函数/规则放在插件提供的jQuery.validator.setDefaults()方法中。因此,只有插件的成功功能需要在不同的地方。
$("#myForm").validate(
success: function(label){
window.location = someURL;
}
);
SubmitHandler是其中之一(在setDefaults方法中),它似乎不起作用。如果表单无效,我将点击提交获取默认页面。对于submitHandler(),是否有返回false或者preventDefault()的东西?
$.validator.setDefaults({
submitHandler: function(form){
var url = $(form).attr('action') ;
var data = $(form).serialize()+'&ajax_validation=1';
$.ajax({
url: url,
data: data,
type: 'POST',
success: function(response) {
//something
}
});
}
});
有人可以帮忙吗?有人尝试使用jQuery处理多个表单验证插件吗?帮助将不胜感激。如果需要详细说明,请告诉我。
答案 0 :(得分:1)
在return false
回调的末尾添加submitHandler
以阻止默认表单操作。
$.validator.setDefaults({
submitHandler: function(form) {
var url = $(form).attr('action') ;
var data = $(form).serialize()+'&ajax_validation=1';
$.ajax({
url: url,
data: data,
type: 'POST',
success: function(response) {
//something
}
});
return false; // <-- add this line
}
});
DEMO :http://jsfiddle.net/SySGN/1/
使用OP的内联类规则编辑了jsFiddle。仍在使用相同的工作。
编辑2:
我刚刚注意到你成功功能的内容。
$("#myForm").validate(
success: function(label){
window.location = someURL; // <-- WHY?!
}
);
你想用什么? 何时你认为success
到底是什么? 为什么您会在验证表单的过程中尝试加载新的网址?
引用OP:
“如果表单无效,我会点击提交时显示默认页面”
这是因为只要您填写第一个字段,success
就会触发并将页面重定向到someURL
。如果您在完成之前更改为新页面,您希望用户如何填写表格?
success
只是一个回调函数,只要元素传递验证,就会触发显示标签。它的设计目的就是在成功填写字段旁边放置图标等等。
The success
callback function, as per jQuery Validate docs:
如果指定,则会显示错误标签以显示有效元素。如果给出了字符串,则会将
class
添加到label
。如果给出了一个Function,则使用label
(作为jQuery对象)和验证的输入(作为DOM元素)调用它。label
可用于添加“ok!”等文本。
您已经使用.ajax()
提交表单,因此在此过程中的任何一点重新加载页面都会导致.ajax()
的整个目的失败。我甚至无法建议替代代码,因为我无法想象你想要做什么。我可以说的是,在整个表单通过验证后,你只需要 使用submitHandler
回调来提交代码。
是否有可能将jQuery验证success
与.ajax()
success
混淆了?后者已经在<{1}}里面的.ajax()
内。但是,submitHandler
允许您在不重新加载页面的情况下提交数据,因此重定向到另一个页面会使.ajax()
毫无意义。