1

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

我看过以下内容:

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

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

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

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

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

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

我需要包含元素(或其 ID)和失败规则的东西。当然,一个元素可以映射到多个失败的规则。

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

4

2 回答 2

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。

于 2012-11-27T17:08:33.863 回答
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
});

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

于 2012-07-19T21:31:22.663 回答