【问题标题】:How to get all invalid elements using jQuery Validator?如何使用 jQuery Validator 获取所有无效元素?
【发布时间】:2016-06-18 11:56:58
【问题描述】:

我想做的事:

我需要遍历所有内部具有无效值的 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() 之后,每个无效对象都会调用它。事实上,它根本没有被调用。你知道一些更好的方法来完成它吗?

【问题讨论】:

标签: jquery jquery-validate


【解决方案1】:

如何使用 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()方法正确初始化表单后,您将获得首次触发表单验证时的无效数。

演示: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
    }
});

演示 2:http://jsfiddle.net/t2vdfjyn/1/


编辑

代码中的注释:

//do something for each invalid object

为每个无效对象做一些事情是插件自动处理的事情...这基本上是这个插件设计的后半部分。如果您要准确说明您要对每个无效对象执行什么操作,我可以向您展示哪个jQuery Validate option 可以用于此目的。


编辑 2

我有标签页,我需要打开一些发生错误的特定标签。为此,我需要获取这些对象的父对象。

The showErrors callback function 有两个参数...

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

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

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

您需要的有关输入元素的所有信息似乎都包含在此处。一旦你有了输入元素的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
    }

演示 3:http://jsfiddle.net/t2vdfjyn/2/

【讨论】:

  • 我想要做的正是我所写的(我想使用 jQuery 验证器获取所有无效元素)。换句话说:我想获取所有内部包含一些不允许值的输入(作为 HTML 对象)。
  • @Ludwik11, “我试图做的正是我所写的” ~ 不完全是。如果你解释你想对每个无效对象做什么,我可以告诉你哪个插件选项可以为你处理。查看我的编辑。
  • 好的,问题已更新。抱歉我的帖子不准确。
  • 我会将您的答案标记为“最佳”,因为理论上您的代码完全符合我的要求。实际上,就我而言,我使用的代码中的某些内容确实很混乱。错误的数量始终等于 0(实际上有一些,它们在单击“提交”按钮后显示在 html 中)。 ErrorMap 也是空的,即使它不应该是空的。我需要找到其他方法来解决它...但感谢您的帮助。
  • @Ludwik11, errorMap 不应为空,除非表单有效。我同意,您的代码中有一些我们看不到的严重损坏的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2010-12-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多