jquery validate:通过别名覆盖require_from_group的默认消息失败

时间:2013-01-09 17:12:17

标签: jquery jquery-validate

我有一个特定的规则,它由类名而不是fieldname:

定义
$.validator.addClassRules("fillone", {
        require_from_group: [1,".fillone"]
    });

我想覆盖默认的错误消息,所以我尝试了这个:

$.validator.addMethod("xrequire_from_group", $.validator.methods.required, 'Hey nutter, pick at least one');

$.validator.addClassRules("fillone", {
  xrequire_from_group: [1, ".fillone"]
});

我在这里有一个小提琴来证明它首先没有干涉别名:

http://jsfiddle.net/houmie/fg6ae/1/

以下是别名后的内容:

http://jsfiddle.net/houmie/m9uNK/1/

正如你所看到的,它打破了它。只输入一个字段后,这两条消息都将消失。但事实并非如此。这是一个错误吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我建议您使用the groups option只显示两个字段的一条消息。从逻辑上讲,由于您不需要填写两个字段,因此两个字段旁边都不应该出现错误消息。这似乎只是一条消息告诉用户选择其中一个更有意义。

然后,您需要使用errorPlacement:选项将其放置在您想要的任何位置。

工作演示: http://jsfiddle.net/m9uNK/2/

var validator = $(form).validate({
    groups: {
        groupname: "field1 field2"  // as per docs, "groupname" is arbitrary
    },
    errorPlacement: function (error, element) {
        if (element.attr("name") == "field1" || element.attr("name") == "field2") {
            error.insertAfter("[name='field2']");  // adjust this accordingly
        } else {
            error.insertAfter(element);  // this is default placement for everything else
        }
    }
});

答案 1 :(得分:0)

我终于找到了一个有效的解决方案,代码中有一个微妙的错误。

$.validator.addMethod("xrequire_from_group", $.validator.methods.required, 'Hey nutter, pick at least one');

替换为

$.validator.addMethod("xrequire_from_group", $.validator.methods.require_from_group, 'Hey nutter, pick at least one');

现在它起作用,终于!!!