我有以下代码
$("#Form").validate({
errorPlacement: function(error, element) {
element.addClass('errorField');
element.after(error);
},
rules: {
...
}
});
errorPlacement
函数在元素未通过所述规则时为其设置了class
errorField
,并且每次验证之前我都要删除此类errorField
。
element.removeClass('errorField');
所以我的问题, jquery.validate中是否有任何事件在验证发生之前触发?
因此,如果element
正在托管此类errorField
,则上述代码将从此元素中删除该类,并将重新验证该字段,如果该字段未通过规则,则可能再次应用此类试。
在验证后触发的任何事件中也可以这样做。因此,如果元素通过规则,我将删除类errorField
。
注意: errorField
是一个css类,它会突出显示通知用户错误的字段
答案 0 :(得分:4)
我不知道“在验证之前”是什么意思。在事情发生之前,该插件应该如何知道该做什么?
引用OP:
“验证在
form.submit
和form.change
两个事件处触发,它与form.submit
一起使用,但我不适用于form.change
”
“它工作正常......”〜什么工作正常?您没有为此处描述的内容显示任何代码。插件将通过其onkeyup
和onfocusout
等内置事件触发验证。 (每个键上的表单都会发生变化)。
我认为问题可能在您对errorPlacement
回调函数预期目的的解释中。它的唯一目的是为您的页面中的错误消息对象的一次性展示位置 进行布局...放置后,它不会重新 - 放置......它会被切换。
我认为您可能希望使用highlight
和unhighlight
。每次验证元素时,都会触发这两个回调。换句话说,这两个回调将在验证消息时切换消息。
但是,我不确定你是否需要走这么远。看起来您只想切换一个名为.errorField
的类。如果是这种情况,只需使用errorClass
选项将此类添加到默认错误类中,它将根据需要自动切换。
$("#Form").validate({
errorClass: 'error errorField', // specify classes to toggle on error (default: error)
validClass: 'valid', // specify classes to toggle on validity (default: valid)
errorPlacement: function(error, element) {
// element.addClass('errorField'); // <-- remove this line
element.after(error);
},
rules: {
...
}
});
答案 1 :(得分:1)
您可以在表单提交事件或点击提交按钮时添加:
$('.errorField').removeClass('errorField');
答案 2 :(得分:0)
这篇帖子已经很久了,但这是我经常使用的解决方案:
您可以创建新的验证方法或编辑任何内置验证方法,如下所示:
https://jqueryvalidation.org/jQuery.validator.addMethod/
$.validator.addMethod("mymethod", function(){
doSomethingBeforeCheck();
return ruleValidator();
});
有了这个,你可以在检查规则之前做任何你想做的事情,以便在验证之前执行任何操作。