我想做的事情:
我需要遍历所有内部具有无效值的HTML对象。这是必要的,因为我有标签页,我需要打开一些错误发生的特定选项卡。为了做到这一点,我需要获得这些对象的父级。
这就是我想解决的问题:
$form.validate().settings.invalidHandler = function (form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
validator.errorList[0].element.focus();
for (var invObj in validator.errorList) {
//do something for each invalid object
}
}
};
其中$ form是<form>
对象,其中包含一些内部验证的输入。
我认为在致电$form.validate()
或$form.valid()
后,会为每个无效对象调用它。事实上,它根本就没有被召唤。你知道一些更好的方法吗?
答案 0 :(得分:4)
如何使用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()
方法正确初始化表单后,您将在首次触发表单验证时获得残留数量。
DEMO: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
}
});
DEMO 2:http://jsfiddle.net/t2vdfjyn/1/
修改强>:
代码中的评论:
//do something for each invalid object
为每个无效对象做一些事情就是插件自动处理的内容 ......它基本上就是这个插件设计的下半部分。如果您要完全解释您为每个无效对象尝试做的,我可以向您展示可以为此目的利用哪个jQuery Validate option。
编辑2 :
我有标签页,我需要打开一些错误发生的特定标签。为了做到这一点,我需要获得这些对象的父级。
The showErrors
callback function有两个论点......
errorMap
:键/值对,其中键引用输入字段的名称,为要为该输入显示的消息赋值。
errorList
:所有当前已验证元素的数组。包含具有以下两个属性的对象:
message
,类型:字符串,为输入显示的消息。element
,类型:元素,此条目的DOM元素。似乎所有关于input元素的信息都将包含在此处。获得输入元素的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
}