动态jQuery使用AddMethod基于元素validation错误消息
假设我有一个自定义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.');
我无法找到一种方法来获取有问题的元素变量,并从中获取任何值。 我在这里想念的是什么?
从查看validation器源代码,我认为应该这样做:
$.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
的第二个参数,错误消息是第三个参数。
首先,我感谢Barmar的回答。
如果你只是想,你可以使用任何jqueryvalidation消息及其param值,你可以简单地调用消息实例。
这是代码
jQuery.validator.addMethod("custom_min", function(value, element, param) { value = replaceAll(value, ',' , ''); return this.optional( element ) || value >= param; },jQuery.validator.messages.min );
在jqueryvalidation中
jQuery('#form_id').validate({ rules: { 'field_name': { required: true, number: true, custom_min: 1000 } });
因此,如果您输入的内容小于1000.它会向您抛出错误消息,“请输入大于1000的值(您在validation中输入的数量)”。如果您的validation需要对任何当前方法进行任何修改,或者此方法会更快你正在用多种语言开发它。
偶然发现这半。 根据结果,我的消息非常动态。 所以在我调用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下找到了一些代码引用
来到这里的派对很晚,但这似乎对我有用:
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值以validation以下内容:
$('form:first').validate({ rules: { "date-filed": { minDate: new Date(2000,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'); });