协助自定义jquery验证错误消息功能

时间:2013-01-16 14:25:13

标签: jquery-validate

我们有一条规则,我们所有的验证消息都必须在摘要中,因此默认的“此字段是必需的”不会削减它,因为消息在摘要中丢失了它们的上下文,因此需要特定的字段指示符。

我有一个我非常喜欢的解决方案,但很快就发现需要除了必填字段之外的消息(电子邮件,网址,自定义方法,如phoneUS等),所以我做了一些补充我的功能。

我一直在使用jQuery,但我不是优化领域的专家,所以我想获得一些专家帮助,以确定下面的函数是否可以优化...我的问题是,“是实际上有更好的方法来处理摘要中的自定义错误消息吗?“

$('.required, .email').each(function(index) {
  var $this = $(this);

  var label = (
    $this.is(':radio')
    ? $("label[data-name='"+$this.attr('name')+"']")
    : label = $("label[for='"+$this.attr('id')+"']")
  );

  var customMessages = [{}];

  if($this.hasClass('required')){
    customMessages.required = "'" + label.text() + "' is required.";
  }

  if($this.hasClass('email')){
    customMessages.email = "'" + label.text() + "' has an invalid email address.";
  }

  $this.rules("add", {
    messages: customMessages
  });
});

这是jsFiddle: http://jsfiddle.net/GD5nw/1/

1 个答案:

答案 0 :(得分:1)

那么为什么不像通常那样只为每个字段逐个字段地分配自定义消息?它似乎比你一直在做的更冗长。

http://docs.jquery.com/Plugins/Validation/validate#toptions

input元素的示例,name属性分配为firstsecondaddress

$('#myform').validate({
    rules: {
        first: {
            required: true
        },
        second: {
            required: true
        },
        address: {
            required: true,
            digits: true // just an example
        }
    },
    messages: {
        first: {
            required: "your first name is required"
        },
        second: {
            required: "your last name is required"
        },
        address: {
            required: "your address is required",
            digits: "must only use digits on address"
        }
    }
});

Working Demo: http://jsfiddle.net/x4YBw/