Динамический jQuery Проверка сообщений об ошибках с помощью AddMethod на основе элемента
Скажем, у меня есть пользовательский 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.');
Я не могу найти способ получить переменную элемента, о которой идет речь, и получить от нее любые значения. Что мне здесь не хватает?
Ответы
Ответ 1
От взгляда на исходный код валидатора я думаю, что это должно сделать это:
$.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
, сообщение об ошибке является третьим аргументом.
Ответ 2
Прежде всего, я ценю ответ Бармара.
Если вы думаете, вы можете использовать любое из сообщений проверки 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 (сумма, которую вы положили в подтверждение)". Этот метод будет быстрее, если ваша проверка требует какой-либо модификации любого текущий метод или вы разрабатываете его на нескольких языках.
Ответ 3
Нашел это полу случайно. Мои сообщения очень динамичны в зависимости от результата. поэтому прямо перед тем, как я вызываю validate, я добавляю атрибут data-msg = "Мое пользовательское сообщение" к элементу. Валидатор выберет это:
err_msg = 'My custom message';
$('#my_element_id').attr('data-msg', err_msg);
$('#my_form_id').validate().element('input[name=\'my_element_name\'');
нашел некоторые ссылки на код в customDataMessage в jquery.validate.js
Ответ 4
поздно на вечеринку здесь, но это, похоже, работает для меня:
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)
},
...