Javascript jQueryValidatePlugin:在验证程序初始化后,如何向其添加组?

Javascript jQueryValidatePlugin:在验证程序初始化后,如何向其添加组?,javascript,jquery,jquery-plugins,validation,jquery-validate,Javascript,Jquery,Jquery Plugins,Validation,Jquery Validate,在我们的网站上,我们使用的是ESP中使用jQuery验证插件的嵌入式注册表单。我们对表单进行了一些自定义,添加了两个自定义字段(名字、姓氏),并希望对它们进行分组,以便两个字段都只有一条错误消息 由于表单的验证器已经初始化,我需要动态添加一些东西。插件提供了规则(“add”,rules)方法来动态地添加验证规则,尽管我们只是使用类名来实现这一点。但是在验证程序初始化之后,没有明确的方法来设置groups选项 我尝试了一些不同的方法来实现这一点,但没有一种方法能够奏效: var settings

在我们的网站上,我们使用的是ESP中使用jQuery验证插件的嵌入式注册表单。我们对表单进行了一些自定义,添加了两个自定义字段(名字、姓氏),并希望对它们进行分组,以便两个字段都只有一条错误消息

由于表单的验证器已经初始化,我需要动态添加一些东西。插件提供了规则(“add”,rules)方法来动态地添加验证规则,尽管我们只是使用类名来实现这一点。但是在验证程序初始化之后,没有明确的方法来设置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);
        }
    }
}));
errorPlacement函数添加到验证器中,但不添加到组中

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

$("#mc-embedded-subscribe-form").validate().settings.groups = { username: "FNAME LNAME" };
$("#mc-embedded-subscribe-form").validate().groups = { username: "FNAME LNAME" };
我完全搞不懂如何做到这一点。

放一个errorElement:“span”,用于在所需位置显示错误。其中用户名\u组在span标记内编码

$("#mc-embedded-subscribe-form").validate($.extend(settings, {     
组:{
用户名:“FNAME LNAME”},
错误元素:“span”

errorPlacement:函数(错误,元素){
如果(element.attr(“name”)==“FNAME”| | element.attr(“name”)==“LNAME”){ 错误。插入后面(“#用户名_组”);
}否则{
错误。插入符(元素)


}}}}})

我也在寻找这样做的方法,并在jQuery帮助论坛中找到了一个解决方案:


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

情景 我们有一个随着用户添加(或删除)行而动态增长的表。每一新行包含几个元素,我们希望每一行的输入元素位于一个验证组中——每一行一个——因为我们只希望每一行有一个错误标签。因为行是动态添加的——在我们调用$(“#表单”).validate()之后,我们需要一种方法来在用户每次添加行时添加一个新组

我们的解决方案 我们通过直接修改validator对象的组成员对其进行黑客攻击:

//文档准备就绪时:
验证程序=$(“#表单”)。验证({
组:。。。,
规则:。。。,
信息:。。。,
等
});
...
//稍后,当我们需要添加新的验证组时:
validator.groups['first_name_row_5']='full_name';
validator.groups['last_name_row_5']='full_name';
最后两行相当于

groups: {full_name: 'first_name_row5 last_name_row_5'}
在validator选项中,但可以在初始调用validate()后添加

这是对jquery.validate内部的攻击,但它可以工作(与jquery validate v1.9.0一起)


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

$("#mc-embedded-subscribe-form").validate().groups = { username: "FNAME LNAME" };
试试这个:

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

我尝试了我能找到的所有方法来动态添加组。唯一对我有效的方法是基于罗恩的上述方法。我有一个表,其中包含动态添加的行,每个行包含许多字段

// Names of fields within each table row that's dynamically added
var validateNames=["field1","field2","field3"];    

// This function overwrites all validator groups and is called during each change of the table
function createGroups() {

    var result = {};

    // Create any static groups    
    result['date-dd'] = result['date-mm'] = result['date-yyyy'] = 'date';

    // Create groups from dynamically added table rows
    var i = 1;
    jQuery("tr", "#table-id tbody").each(function() {

        for (j = 0; j < validateNames.length; ++j) {
            result[validateNames[j] + "-" + i] = 'fieldGroup_' + i;
        }

        i++;
    });    

    validator.groups = result;
}
//动态添加的每个表行中的字段名称
var validateNames=[“field1”、“field2”、“field3”];
//此函数覆盖所有验证程序组,并在表的每次更改期间调用
函数createGroups(){
var result={};
//创建任何静态组
结果['date-dd']=结果['date-mm']=结果['date-yyyy']='date';
//从动态添加的表行创建组
var i=1;
jQuery(“tr”,“#table id tbody”)。每个(函数(){
对于(j=0;j
Sweet,很棒的发现。实际上,我解决这个问题的方法是在包含ESP表单之前将组设置为默认值。这显然是一个更好的解决方案!感谢您提供
validator.groups['FNAME']='username';validator.groups['LNAME']='username'
// Names of fields within each table row that's dynamically added
var validateNames=["field1","field2","field3"];    

// This function overwrites all validator groups and is called during each change of the table
function createGroups() {

    var result = {};

    // Create any static groups    
    result['date-dd'] = result['date-mm'] = result['date-yyyy'] = 'date';

    // Create groups from dynamically added table rows
    var i = 1;
    jQuery("tr", "#table-id tbody").each(function() {

        for (j = 0; j < validateNames.length; ++j) {
            result[validateNames[j] + "-" + i] = 'fieldGroup_' + i;
        }

        i++;
    });    

    validator.groups = result;
}