动态jQuery使用AddMethod基于元素验证错误消息

Mar*_*.io 28 javascript validation jquery jquery-validate

假设我有一个自定义AddMethod到jQuery Validate,如:

$.validator.addMethod('min-length', function (val, element) {
    // do stuff

// the error message here needs to be dynamic
}, 'The field cannot be less than than '
     + element.attr('data-min') + // it is within the closure, but it can't grab it
   ' length.');
Run Code Online (Sandbox Code Playgroud)

我无法找到一种方法来获取有问题的元素变量,并从中获取任何值.我在这里错过了什么?

Bar*_*mar 68

从查看验证器源代码,我认为应该这样做:

$.validator.addMethod('min-length', function (val, element) {
    return this.optional(element) || val.length >= $(element).data('min');
}, function(params, element) {
  return 'The field cannot be less than than ' + $(element).data('min') + ' length.'
});
Run Code Online (Sandbox Code Playgroud)

在原始代码中,消息字符串不在闭包内; 闭包是第二个参数addMethod,错误信息是第三个参数.

  • 正是我在寻找的东西.更进一步,您可以在验证函数中构造一个自定义错误消息,并将其存储在元素的数据中,例如`$(element).data('error','... custom message ...')`然后通过`return $(element).data('error')`在消息函数中恢复它 (9认同)
  • 另外一个补充是,如果在其他地方定义了消息,例如规则集,将忽略"addMethod"的第3个参数.我认为验证器首先使用参数,然后使用默认值,如果`null`或返回一个空字符串. (3认同)

小智 5

首先,我感谢Barmar的回答。

如果您只是认为,则可以将任何带有jquery验证消息的param值都使用,您可以仅调用消息实例。

这是代码

            jQuery.validator.addMethod("custom_min", function(value, element, param) {
                value = replaceAll(value, ',' , '');
                return this.optional( element ) || value >= param;
            },jQuery.validator.messages.min );  
Run Code Online (Sandbox Code Playgroud)

在jQuery验证中

jQuery('#form_id').validate({
   rules: {
    'field_name': {
       required: true,
       number: true,
       custom_min: 1000
   }
});
Run Code Online (Sandbox Code Playgroud)

因此,如果您输入的值小于1000,则会引发错误消息,“请输入大于1000的值(您在验证中输入的值)”。如果您的验证需要对任何当前方法进行任何修改,则此方法会更快您正在使用多种语言进行开发。