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

问题描述 投票:26回答:5

假设我有一个自定义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.');

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

javascript jquery validation jquery-validate
5个回答
65
投票

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

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

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


4
投票

首先,我感谢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 );  

在jquery验证中

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

因此,如果您输入的内容少于1000.它将向您抛出错误消息,“请输入大于1000的值(您在验证中输入的金额)”。如果您的验证需要对任何当前方法进行任何修改,则此方法会更快你正在用多种语言开发它。


1
投票

意外发现这半。根据结果​​,我的消息非常动态。所以在我调用validate之前,我向元素添加了一个属性data-msg =“我的自定义消息”。 Validator会选择它:

err_msg = 'My custom message';
$('#my_element_id').attr('data-msg', err_msg);
$('#my_form_id').validate().element('input[name=\'my_element_name\'');

在jquery.validate.js中的customDataMessage下找到了一些代码引用


0
投票

来到这里的派对很晚,但这似乎对我有用:

jQuery.validator.addMethod("minDate", function(value, element, param) {
    var inputDate = new Date(value);
    return (inputDate >= param)
    }, function(param, element) {
        return 'Enter a date greater than or equal to ' + $.datepicker.formatDate("M d, yy", new Date(param));
});

之前已在控件上设置minDate值以验证以下内容:

$('form:first').validate({
    rules: {
        "date-filed": {
            minDate: new Date(2000,0,0)
        },
...

0
投票

如果Barmar的答案对您不起作用,可能是因为您对该元素的设置已包含错误消息(例如,从asp.net MVC中的服务器设置)

因此jQuery.validate代码将忽略$ .validator.addMethod的第二个参数的新默认设置

解决它的方法是执行以下操作:

$.validator.addMethod('min-length', function (val, element) {
   this.settings.messages[element.name]['min-length'] = function () { return 'put your custom message here'; };

   return this.optional(element) || val.length >= $(element).data('min');
});
© www.soinside.com 2019 - 2024. All rights reserved.