如何使用 jQuery Validator 获取所有无效元素?
这就是我想解决的方法:
你还没有解释你想要做什么。
你知道一些更好的方法来完成它吗?
您没有解释任何关于您要完成什么,或者为什么从未尝试过 the example in the documentation。
通常,将自定义的invalidHander 回调放在.validate() 方法中。你关注the documentation了吗?
$("#myform").validate({
// other rules, options, callbacks, etc.,
invalidHandler: function(event, validator) {
var errors = validator.numberOfInvalids(); // <- NUMBER OF INVALIDS
console.log(errors);
}
});
使用.validate()方法正确初始化表单后,您将获得首次触发表单验证时的无效数。
演示:http://jsfiddle.net/t2vdfjyn/
但是,如果您希望在生成每个新错误或清除现有错误后自行更新无效数,那么invalidHandler 不是正确使用的函数;你需要the showErrors callback 来代替......
$("#myform").validate({
// other rules, options, callbacks, etc.,
showErrors: function(errorMap, errorList) {
var errors = this.numberOfInvalids(); // <- NUMBER OF INVALIDS
console.log(errors);
this.defaultShowErrors(); // <- ENABLE default MESSAGES
}
});
演示 2:http://jsfiddle.net/t2vdfjyn/1/
编辑:
代码中的注释:
//do something for each invalid object
为每个无效对象做一些事情是插件自动处理的事情...这基本上是这个插件设计的后半部分。如果您要准确说明您要对每个无效对象执行什么操作,我可以向您展示哪个jQuery Validate option 可以用于此目的。
编辑 2:
我有标签页,我需要打开一些发生错误的特定标签。为此,我需要获取这些对象的父对象。
The showErrors callback function 有两个参数...
您需要的有关输入元素的所有信息似乎都包含在此处。一旦你有了输入元素的name,你就可以使用jQuery来获取父元素了。
showErrors: function(errorMap, errorList) {
var errors = this.numberOfInvalids(); // <- NUMBER OF INVALIDS
$("#num_invalids").html(errors);
console.log(errorMap);
$.each(errorMap, function(key, value) {
console.log(key); // <- name of invalid field
var parent = $('[name="' + key + '"]').parent();
console.log(parent); // <- parent object
});
this.defaultShowErrors(); // <- ENABLE default MESSAGES
}
演示 3:http://jsfiddle.net/t2vdfjyn/2/