Пользовательское сообщение addmethod для проверки jquery
Я создал метод для плагина проверки правильности jquery, который работает как удаленное правило. Разница в том, что я хотел бы отображать динамическое сообщение об ошибке (основанное на ответе ajax).
jQuery.validator.addMethod("duplicate", function(value, element, params) {
var object_settings = this.settings;
params.data[$(element).attr("name")] = value;
$.post(params.url, params.data, function(response) {
if (response == 'true'){ return true; }
else {
object_settings.messages[element.name] = response;
return false;
}
}, 'text');
}, '');
Он работает... вроде... он устанавливает сообщение, но не отображает его на начальном этапе (если вы проверяете поле второй раз, отображается сообщение).
Любые предложения?
(возможно, удаленное правило предлагает эту функциональность... я не нашел ничего в документации)
Ответы
Ответ 1
Здесь решение.... нужно было вызвать функцию showErrors объекта:
jQuery.validator.addMethod("duplicate", function(value, element, params) {
var validator = this;
params.data[element.name] = value;
$.post(params.url, params.data, function(response) {
if (response == 'true'){ return true; }
else {
var errors = {};
errors[element.name] = response;
validator.showErrors(errors);
return false;
}
}, 'text');
}, '');
Взято из "remote" в jquery.validate.js(строки 917 - 919)
Ответ 2
Ищем решение для этого, и нашел это...
В исходном примере, если вы измените эту строку:
object_settings.messages[element.name] = response;
Для этого:
$.validator.messages.duplicate = response;
Это работает для меня. Я нашел его здесь:
http://blogs.teamb.com/craigstuntz/2009/01/15/37923/
Ответ 3
Я следил за процессом, упомянутым на сайте http://blogs.teamb.com/craigstuntz/2009/01/15/37923/#comment-125774 и преуспел.
Вы должны вызвать метод с динамическим сообщением, чтобы он отображал это сообщение. Например
$.validator.addMethod("validatePremium", function(value, element, param) {
if( Condition )
{
$.validator.messages.validatePremium = "your message here";
//enter code here
//...
return false;
}
}, $.validator.messages.validatePremium);
Ответ 4
это сработало для меня
var errorMsg = '', $valid = false;
$.validator.addMethod("methodName",function(val, elem){
$.ajax({
url:'your_script.php',
type:"POST",
dataType:"json",
data : {},
success:function(response){
if(response.success == false){
errorMsg = response.msg;
$valid = response.success;
}
else{
$valid = true;
}
}
});
$.validator.messages["methodName"] = errorMsg;
return $valid;
},'');
обязательно замените " methodName" на имя метода
в этом случае "дублировать" в обоих местах (функция addMethod 1st arg и в тело функции addMethod $.validator.messages [ "methodName" ])