Как добавить сообщения в класс с помощью addClassRules - PullRequest
19 голосов
/ 14 июля 2010

Я использую jQuery Validate для проверки страницы с большим количеством повторяющихся строк данных. Из-за ограниченного пространства каждая строка имеет собственную сводку проверки.

Я использую addClassRules, чтобы применить правила проверки к странице, но сообщения об ошибках по умолчанию являются слишком общими в сводке (например, «Поле обязательно для заполнения, поле обязательно для заполнения и т. Д.).

Пример:

jQuery.validator.addClassRules({
amount: {
    required: true,
    range: [0, 2000000]
},
comment: {
    maxlength: 51
},
owner: {
    notFirstOption: true
},
A: {
    required: function (element) {  
        return getParentElement($(element), "tr").find(".colB input.B").val().length > 0;
    },
    digits: true
}});

Можете ли вы применять настраиваемые сообщения для правил в каждом классе валидации? В идеале я после чего-то вроде:

jQuery.validator.addClassMessages({
    amount: {
        required: "Amount is required",
        range: "Amount must be between 0 and 2,000,000"
    },
    comment: {
        maxlength: "Comment may be a maximum of 51 characters"
    },
    owner: {
        notFirstOption: "Please select an owner"
    },
    A: {
        required: "A is required if B is entered",
        digits: "A must be numeric"
    }});

Заранее благодарим за любую помощь, которую вы можете предложить!

Ответы [ 6 ]

29 голосов
/ 06 сентября 2011

В документации ответ на псевдоним метода, который вы хотите вызвать, и добавление пользовательского сообщения.

Проверьте ссылку под заголовком «Правила рефакторинга»:

// alias required to cRequired with new message
$.validator.addMethod("cRequired", $.validator.methods.required,
"Customer name required");
// alias minlength, too
$.validator.addMethod("cMinlength", $.validator.methods.minlength, 
// leverage parameter replacement for minlength, {0} gets replaced with 2
$.format("Customer name must have at least {0} characters"));
// combine them both, including the parameter for minlength
$.validator.addClassRules("customer", { cRequired: true, cMinlength: 2 });
5 голосов
/ 10 декабря 2014

Это можно сделать с помощью приведенного ниже кода,

  $.validator.messages.accept = 'File must be JPG, GIF or PNG';

    $.validator.addClassRules("files", {            
      accept : "png|jpe?g|gif",  
      filesize : 2000000
    });
2 голосов
/ 15 июля 2010

Поскольку все, очевидно, заинтересованы в ответе на этот вопрос, вот следующий шаг в моем стремлении к ответу!

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

Добавлен перед 'customMetaMessage'

customClassMessage: function (element, method) {
    //Get the elements class(es)
    var classes = $(element).attr("class").split(" ");

    //return any message associated with said class and method
    var m = $.validator.messages[classes[0]];

    return m && (m.constructor == String
        ? m
        : m[method]);
},

Исправлено 'defaultMessage', чтобы включить вызов вышеупомянутого метода

defaultMessage: function (element, method) {
                return this.findDefined(
                this.customMessage(element.name, method),
                this.customMetaMessage(element, method),
                this.customClassMessage(element, method),
                // title is never undefined, so handle empty string as undefined
                !this.settings.ignoreTitle && element.title || undefined,
                $.validator.messages[method],
                "<strong>Warning: No message defined for " + element.name + "</strong>"
            );
            },

Добавлен 'Метод addClassMessages

        addClassMessages: function (className, messages) {
        if (className.constructor == String) {
            $.validator.messages[className] = messages != undefined ? messages : $.validator.messages[className];
        }
        else {
            $.extend(this.messages, className);
        }
    },

Я пока не смог разобраться, как прикрепить эти дополнительные методы вне плагина.По крайней мере, мне не нужно объявлять сообщения об ошибках в атрибуте 'class'.

jQuery.validator.addClassMessages({
    amount: {
        required: "Amount is required",
        range: "Amount must be between 0 and 2,000,000",
        digits: "Amount must be numeric"
    }
});
2 голосов
/ 14 июля 2010

Я придумала довольно отвратительное решение, но надеюсь на что-то более чистое с немного большим количеством времени ...

В любом случае, назначая сообщения через метаданные jQuery, я могу настроить ихдля каждого класса.

class="amount {validate:
                {messages:
                  {required:'Amount is required',
                   range: 'Amount must be between 0 and 2,000,000',
                   digits: 'Amount must be numeric'}
                }
              }"

... и так далее для каждого из полей в моих строках сетки.

Я буду смотреть на расширение метода 'addClassRules' для приема параметра сообщений, но сейчас это работает, так что будет работать.

1 голос
/ 17 августа 2017

Использовать data-msg-required = "Сообщение об ошибке здесь" с элементом, который вы хотите выполнить проверку

<select name="account1" data-msg-required="Please select an account">
<option value="">--Select Account--</option>
<optgroup label="100-Assets">
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
</optgroup>

0 голосов
/ 02 сентября 2010

Попробуйте это:

jQuery.validator.addClassRules({
    amount: {
        required: true,
        range: [0, 2000000],
        messages: {required: "Required field!", range: "Invalid range!"}
    },
    comment: {
        maxlength: 51,
        messages: {maxlength: "Max 51 characters!"}
    }
})

Я думаю, это то, что вы ищете, правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...