jQuery Validate Plugin:如何在初始化后将组添加到验证器?

aar*_*onp 9 javascript validation jquery jquery-plugins jquery-validate

在我们的网站上,我们使用来自ESP的嵌入式注册表单,该表单使用jQuery validate插件.我们正在自定义表单,添加几个自定义字段(名字,姓氏),我们希望它们被分组,因此两个字段只有一个错误消息.

由于表单的验证器已经初始化,我需要动态添加一些内容.该插件提供了动态添加到验证规则中的规则("添加",规则)方法,尽管我们只是使用类名来执行此操作.但是,在初始化验证器之后,没有明确的方法来设置groups选项.

我已经尝试了一些不同的东西来实现这一点,但没有一个能够工作:

var settings = $("#mc-embedded-subscribe-form").validate().settings;
$("#mc-embedded-subscribe-form").validate($.extend(settings, {
    groups: {
        username: "FNAME LNAME"
    },
    errorPlacement: function(error, element) {
        if (element.attr("name") == "FNAME" || element.attr("name") == "LNAME") {
            error.insertAfter("#username_group");
        } else {
            error.insertAfter(element);
        }
    }
}));
Run Code Online (Sandbox Code Playgroud)

errorPlacement函数将添加到验证程序,但不会添加到组.

我也尝试过显式设置groups选项,但这也没有效果.

$("#mc-embedded-subscribe-form").validate().settings.groups = { username: "FNAME LNAME" };
$("#mc-embedded-subscribe-form").validate().groups = { username: "FNAME LNAME" };
Run Code Online (Sandbox Code Playgroud)

我完全不知道如何实现这一目标.

ron*_*man 10

我最近遇到了同样的问题,并找到了不同的解决方案.

情景

我们有一个表,当用户添加(或删除)行时,它会动态增长.每个新行包含几个元素,我们希望每个行的输入元素都在一个验证组中 - 每行一个 - 因为我们只需要每行一个错误标签.因为行是动态添加的 - 在我们调用$('#the-form')之后.validate () -我们需要一种方法来在每次用户添加行时添加新组.

我们的方案

我们通过直接修改其groups成员来攻击验证器对象:

// on document ready:
validator = $('#the-form').validate({
    groups: ...,
    rules: ...,
    messages: ...,
    etc.
});

...

// later, when we need to add a new validation group:
validator.groups['first_name_row_5'] = 'full_name';
validator.groups['last_name_row_5'] = 'full_name';
Run Code Online (Sandbox Code Playgroud)

最后两行相当于

groups: {full_name: 'first_name_row5 last_name_row_5'}
Run Code Online (Sandbox Code Playgroud)

在验证器选项中,但可以在初始调用validate()之后添加.

这是对jquery.validate内部的攻击,但是它有效(使用jquery validate v1.9.0).


最后,直接回答OP的问题:而不是:

$("#mc-embedded-subscribe-form").validate().groups = { username: "FNAME LNAME" };
Run Code Online (Sandbox Code Playgroud)

试试这个:

var validator = $("#mc-embedded-subscribe-form").validate();
validator.groups['FNAME'] = 'username';
validator.groups['LNAME'] = 'username';
Run Code Online (Sandbox Code Playgroud)


Ste*_*son 5

我也在寻找一种方法来实现这一点,并在jQuery帮助论坛中找到了一个解决方案:http://forum.jquery.com/topic/jquery-validate-defining-groups-dynamically