使用jquery.validate循环遍历每个失败的规则

时间:2012-07-19 21:15:41

标签: javascript jquery validation jquery-validate unobtrusive-validation

在使用jquery.validate库验证表单后,我需要能够遍历当前失败的规则。

我看过以下内容:

$('form').validate().errorList

这将返回错误的消息和元素,但不会返回失败的规则的规则/名称。

$('form').validate().errorMap

这只返回一个元素ID /消息对。

$('form').validate().settings.rules

这将返回所有元素及其相关规则的列表,但没有指示当前哪些元素失败的值。

我需要包含元素(或其ID)和失败规则的内容。当然,元素可能会映射到多个失败的规则。

如果有一个事件我可以与不显眼的库挂钩(因为并非所有事件似乎都是不引人注意的支持),这将给我规则和失败的元素,这将是理想的。

2 个答案:

答案 0 :(得分:3)

如果您正在寻找可以使用扩展程序的方法,则可以执行以下操作:

//update FormatAndAdd function to store failed rule values in data
var oldFormatAndAdd = validator.formatAndAdd;

validator.formatAndAdd = function (element, rule) {
    oldFormatAndAdd.apply(this, arguments);
    $.data(element, "failedMethod", rule.method);
};

var oldCheck = validator.check;

//update check to remove failed rules from data if element is valid
validator.check = function (element) {
    var result = oldCheck.apply(this, arguments);
    if (result) {
        $.data(element, "failedMethod", null);
    }
};

我只是将规则信息存储在数据中,但我确信你可以更新它来操作errorList。

答案 1 :(得分:0)

validate()函数初始化小部件;它不验证表单。您需要为无效表单指定处理程序,如下所示:

$("form").validate({
    invalidHandler: function(form, validator) {

完成后,验证器对象将在其 errorList 属性中包含一系列无效元素。

此处提供完整文档:http://docs.jquery.com/Plugins/Validation/validate#options

继续你的评论,你理论上可以修改第585行,将规则方法包含在errorList中:

this.errorList.push({
    method: rule.method,
    message: message,
    element: element
});

我已经使用基本规则对其进行了测试,但如果你有自定义函数验证器,你也应该尝试这些。