Подтвердить что ты не робот

Пользовательское сообщение 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');
}, '');

Он работает... вроде... он устанавливает сообщение, но не отображает его на начальном этапе (если вы проверяете поле второй раз, отображается сообщение).

Любые предложения?

(возможно, удаленное правило предлагает эту функциональность... я не нашел ничего в документации)

4b9b3361

Ответ 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" ])