2

我有以下代码

$("#Form").validate({

    errorPlacement: function(error, element) {
        element.addClass('errorField');
        element.after(error);
    },
    rules: {
        ...
    }
});

errorPlacement函数会class errorField在元素未通过所描述的规则时为元素设置一个 css,并且每次在验证之前我都想删除此类errorField

element.removeClass('errorField');

所以我的问题是,jquery.validate 中是否有任何事件在验证发生之前触发?

因此,如果这element是托管此类errorField,则上述代码将从该元素中删除该类,并将重新验证该字段,并且如果该字段再次不符合规则,则可以再次应用该类。

这也可以在验证后触发的任何事件中完成,因此如果元素通过规则,我将删除该类errorField

注意: errorField是一个 css 类,它将突出显示该字段以通知用户有关错误

4

3 回答 3

4

我不知道您所说的“验证前”是什么意思。插件应该如何在事情发生之前知道该做什么?

引用操作:

“验证会在两个事件中触发,form.submit并且form.change它适用于form.submit,但我没有为form.change

“它工作正常......” 〜什么工作正常?对于您在此处尝试描述的内容,您没有显示任何代码。该插件使用其内置事件(如onkeyup和)触发验证onfocusout。(每个键上的形式都会改变)。

我认为问题可能在于您对errorPlacement回调函数预期目的的解释。它的唯一目的是用于布局......在您的页面中一次性放置错误消息对象。一旦放置,它就不会重新放置......它是切换的。

我想你可能想用highlightandunhighlight代替。每次验证元素时都会触发这两个回调。换句话说,这两个回调将在验证消息时切换消息。

但是,我不确定你甚至需要走这么远。看起来您只是想切换一个名为.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: {
        ...
    }
});

在此处查看所有选项和回调函数

于 2013-10-04T15:18:25.673 回答
1

您可以在表单的提交事件或单击提交按钮时添加它:

$('.errorField').removeClass('errorField');
于 2013-10-04T12:26:53.193 回答
0

自从这篇文章以来已经有很长时间了,但这是我通常使用的解决方案:

您可以创建新的验证方法或编辑任何内置验证方法,如下所示:

https://jqueryvalidation.org/jQuery.validator.addMethod/

$.validator.addMethod("mymethod", function(){
    doSomethingBeforeCheck();
    return ruleValidator();
});

有了这个,你可以在检查规则之前做任何你想做的事情,以便在验证之前执行任何操作。

于 2016-09-02T12:22:31.413 回答