Как добавить сообщения в класс с помощью addClassRules
Я использую 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"
}});
Заранее благодарим за любую помощь, которую вы можете предложить!
Ответы
Ответ 1
В документации ответ должен быть псевдонимом метода, который вы хотите вызвать, и добавить пользовательское сообщение.
Проверьте ссылку в разделе "Правила рефакторинга":
// 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 });
Ответ 2
Это можно сделать, используя приведенный ниже код,
$.validator.messages.accept = 'File must be JPG, GIF or PNG';
$.validator.addClassRules("files", {
accept : "png|jpe?g|gif",
filesize : 2000000
});
Ответ 3
Я придумал довольно отвратительное решение, но надеюсь на что-то намного более чистое с немного большим временем...
В любом случае, назначая сообщения через метаданные 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 для принятия параметра сообщений, но пока это работает так, что это будет сделано.
Ответ 4
Поскольку все, очевидно, заинтересованы в ответе на этот вопрос, вот следующий шаг в моем стремлении к ответу!
Я добавил методы в плагин, которые позволяют добавлять сообщения класса и изменят обработчик сообщений по умолчанию, чтобы выбрать их.
Добавлен перед '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"
}
});
Ответ 5
Используйте 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>
Ответ 6
Попробуйте следующее:
jQuery.validator.addClassRules({
amount: {
required: true,
range: [0, 2000000],
messages: {required: "Required field!", range: "Invalid range!"}
},
comment: {
maxlength: 51,
messages: {maxlength: "Max 51 characters!"}
}
})
Я думаю, что это то, что вы ищете, правильно?