Подтвердить что ты не робот

Динамический 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.');

Я не могу найти способ получить переменную элемента, о которой идет речь, и получить от нее любые значения. Что мне здесь не хватает?

4b9b3361

Ответ 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)
        },
...