Параметрирование jQuery Validate Message на основе элемента [duplicate]

Общий метод расширения SetValue (но только для свойств ref) будет:

    public static void SetValue<T>(this T property, T value)
    {
        property = value;
    }

И будет использоваться как

ButtonOrNull?.Visibility.SetValue(Visibility.Hidden);
26
задан Mark Pieszak - DevHelp.Online 13 November 2012 в 00:28
поделиться

5 ответов

От взгляда на исходный код валидатора, я думаю, что это должно сделать это:

$.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, сообщение об ошибке является третьим аргументом.

60
ответ дан Barmar 19 August 2018 в 09:47
поделиться
  • 1
    Большое спасибо Бармару! Не имеет понятия, что вы могли бы это сделать :) Также вы правы, это не закрытие, моя ошибка. – Mark Pieszak - DevHelp.Online 13 November 2012 в 18:33
  • 2
    Только то, что я искал. На следующем шаге вы можете создать собственное сообщение об ошибке внутри функции проверки и занести его в данные элемента, например $(element).data('error','... custom message ...'), а затем восстановить его в функции сообщения через return $(element).data('error') – patricksurry 17 August 2014 в 13:19
  • 3
    Еще одно дополнение состоит в том, что если есть сообщение, определенное в другом месте, например, в наборе правил этот третий параметр addMethod будет проигнорирован. Я думал, что валидатор будет использовать параметр сначала, а затем использовать значение по умолчанию, если null или пустая строка была возвращена. – ps2goat 10 October 2014 в 19:35
  • 4
    element не является объектом jQuery. Нужно ли превращать его в одно? – user1032531 5 January 2016 в 14:39
  • 5
    @ user1032531 Да, да. Я исправил код. – Barmar 5 January 2016 в 17:28
  • 6
    – Mohammad Faisal 6 April 2016 в 12:21

Если ответ 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');
});
0
ответ дан Avi Pinto 19 August 2018 в 09:47
поделиться

поздно для этой вечеринки, но это, похоже, работает для меня:

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
ответ дан Kyle 19 August 2018 в 09:47
поделиться

Найден этот полу случайно. Мои сообщения очень динамичны в зависимости от результата. поэтому прямо перед тем, как я вызываю 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\'');

нашел некоторые ссылки на код в customDataMessage в jquery.validate.js

1
ответ дан Mohsen Rajabi 19 August 2018 в 09:47
поделиться

Прежде всего, я ценю ответ Бармара.

Если вы только думаете, вы можете использовать любое из сообщений проверки jquery с его значением параметра, вы можете просто вызвать экземпляры сообщений.

Вот код

            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
ответ дан Rocker Maruf 19 August 2018 в 09:47
поделиться
  • 1
    Я подтвердил ваш ответ, потому что он разрешает пример, представленный в вопросе, но ответ Бармара дает более общее решение, которое я искал, когда я приземлился на этой странице. – cosan 11 February 2017 в 19:16
Другие вопросы по тегам:

Похожие вопросы: