假设我有一个自定义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.');
我无法找到一种方法来获取有问题的元素变量,并从中获取任何值。我在这里缺少什么?
答案 0 :(得分: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
的第二个参数,错误信息是第三个参数。
答案 1 :(得分: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的值(你在验证中输入的数量)”。如果你的验证需要任何修改,这个方法会更快当前的方法或您正在使用多种语言进行开发。
答案 2 :(得分: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下找到了一些代码引用答案 3 :(得分: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)
},
...
答案 4 :(得分: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');
});
答案 5 :(得分:0)
代码:
$.validator.addMethod("strongePassword", function(value) {
return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) && /[a-z]/.test(value) && /\d/.test(value) && /[A-Z]/.test(value);
},"The password must contain at least 1 number, at least 1 lower case letter, and at least 1 upper case letter");
用于:
rules: {
password: {
required: !0,
strongePassword: true
},
}