验证前的jQuery.validate事件

时间:2013-10-04 11:02:56

标签: jquery jquery-validate

我有以下代码

$("#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类,它会突出显示通知用户错误的字段

3 个答案:

答案 0 :(得分:4)

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

引用OP:

  

“验证在form.submitform.change两个事件处触发,它与form.submit一起使用,但我不适用于form.change

“它工作正常......”〜什么工作正常?您没有为此处描述的内容显示任何代码。插件通过其onkeyuponfocusout等内置事件触发验证。 (每个键上的表单都会发生变化)。

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

我认为您可能希望使用highlightunhighlight。每次验证元素时,都会触发这两个回调。换句话说,这两个回调将在验证消息时切换消息。

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

See all options & callback functions here

答案 1 :(得分:1)

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

$('.errorField').removeClass('errorField');

答案 2 :(得分:0)

这篇帖子已经很久了,但这是我经常使用的解决方案:

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

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

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

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