【问题标题】:jquery validate: Overriding default message via Alias for require_from_group failsjquery validate:通过别名覆盖 require_from_group 的默认消息失败
【发布时间】:2013-01-09 17:12:17
【问题描述】:

我有一个由类名而不是字段名定义的特定规则:

$.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/

如您所见,它破坏了它。仅输入一个字段后,两条消息都会消失。但事实并非如此。这是一个错误吗?

【问题讨论】:

  • 我已经尝试过别名解决方案。它适用于required 等简单的东西(如链接中所示),但不适用于require_from_group。我刚试过。 :(
  • 请构建一个 jsFiddle 来演示您的问题。这是一个适当的起点,包括:jsfiddle.net/fg6ae
  • @Sparky:非常感谢您的布局。之前和之后我有两个小提琴要给你看。请参阅更新的问题。我认为这是一个错误,或者我做得不对。
  • 请清理并澄清问题。首先,您声明您无法获得自定义消息,然后在您的编辑中,您实际上正在使用自定义消息,但声明它没有正确清除。

标签: jquery jquery-validate


【解决方案1】:

如果我理解正确,我建议您使用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
        }
    }
});

【讨论】:

  • 非常感谢。但这不是我希望的解决方案。我喜欢它已经实现的方式。有两条错误消息正是我所需要的,因为这两个字段在我的表单中并不相邻,它可以更容易地发现哪两个是要填写的。我需要做的就是更改自定义消息,这里的解决方案是与我的情况不匹配的替代解决方案。 :(
【解决方案2】:

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

$.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');

现在终于成功了!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2014-03-05
    • 2010-11-25
    • 2014-04-04
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多