Как добавить сообщения к классу с addClassRules

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

Я использую 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"
    }});

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

19
задан daddywoodland 14 July 2010 в 14:54
поделиться

2 ответа

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

В любом случае, назначая сообщения через метаданные 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', чтобы он принимал параметр messages, но пока это работает, так что сойдет.

2
ответ дан 30 November 2019 в 03:19
поделиться

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

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

Добавлен перед '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
ответ дан 30 November 2019 в 03:19
поделиться
Другие вопросы по тегам:

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