如何使用jQuery Validator获取所有无效元素?

时间:2016-06-18 11:56:58

标签: jquery jquery-validate

我想做的事情:

我需要遍历所有内部具有无效值的HTML对象。这是必要的,因为我有标签页,我需要打开一些错误发生的特定选项卡。为了做到这一点,我需要获得这些对象的父级。

这就是我想解决的问题:

$form.validate().settings.invalidHandler = function (form, validator) {
    var errors = validator.numberOfInvalids();
    if (errors) {
        validator.errorList[0].element.focus();
        for (var invObj in validator.errorList) {
            //do something for each invalid object
        }
    }
};

其中$ form是<form>对象,其中包含一些内部验证的输入。

我认为在致电$form.validate()$form.valid()后,会为每个无效对象调用它。事实上,它根本就没有被召唤。你知道一些更好的方法吗?

1 个答案:

答案 0 :(得分:4)

  

如何使用jQuery Validator获取所有无效元素?

     

这就是我想解决的问题:

你还没有解释你正在尝试做什么。

  

你知道一些更好的方法吗?

您没有解释任何关于您要完成什么的事情,或者为什么the example in the documentation从未尝试过。

通常,会将自定义invalidHander回调放在.validate()方法中。你有没有关注the documentation

$("#myform").validate({
    // other rules, options, callbacks, etc.,
    invalidHandler: function(event, validator) {
        var errors = validator.numberOfInvalids(); // <- NUMBER OF INVALIDS
        console.log(errors);
    }
});

使用.validate()方法正确初始化表单后,您将在首次触发表单验证时获得残留数量。

DEMO:http://jsfiddle.net/t2vdfjyn/

但是,如果您希望在生成每个新错误或清除现有错误后自动更新残留数量,则invalidHandler不是正确使用的函数;你需要the showErrors callback而不是......

$("#myform").validate({
    // other rules, options, callbacks, etc.,
    showErrors: function(errorMap, errorList) {
        var errors = this.numberOfInvalids();  // <- NUMBER OF INVALIDS
        console.log(errors);

        this.defaultShowErrors(); // <- ENABLE default MESSAGES
    }
});

DEMO 2:http://jsfiddle.net/t2vdfjyn/1/

修改

代码中的评论:

//do something for each invalid object

为每个无效对象做一些事情就是插件自动处理的内容 ......它基本上就是这个插件设计的下半部分。如果您要完全解释您为每个无效对象尝试做的,我可以向您展示可以为此目的利用哪个jQuery Validate option

编辑2

  

我有标签页,我需要打开一些错误发生的特定标签。为了做到这一点,我需要获得这些对象的父级。

The showErrors callback function有两个论点......

  • errorMap:键/值对,其中键引用输入字段的名称,为要为该输入显示的消息赋值。

  • errorList:所有当前已验证元素的数组。包含具有以下两个属性的对象:

    • message,类型:字符串,为输入显示的消息。
    • element,类型:元素,此条目的DOM元素。

似乎所有关于input元素的信息都将包含在此处。获得输入元素的name后,可以使用jQuery获取父元素。

    showErrors: function(errorMap, errorList) {
        var errors = this.numberOfInvalids(); // <- NUMBER OF INVALIDS
        $("#num_invalids").html(errors);

        console.log(errorMap);
        $.each(errorMap, function(key, value) {
            console.log(key); // <- name of invalid field
            var parent = $('[name="' + key + '"]').parent();
            console.log(parent); // <- parent object
        });

        this.defaultShowErrors(); // <- ENABLE default MESSAGES
    }

DEMO 3:http://jsfiddle.net/t2vdfjyn/2/