JQuery валидатор addmethod пользовательское сообщение - PullRequest
18 голосов
/ 10 июня 2009

Я создал метод для плагина валидатора 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');
}, '');

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

Есть предложения?

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

Ответы [ 4 ]

15 голосов
/ 10 июня 2009

Вот решение .... необходимо вызвать функцию 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)

9 голосов
/ 11 января 2011

тоже искал решение этой проблемы и нашел это ...

В исходном примере, если вы измените эту строку:

object_settings.messages[element.name] = response;

К этому:

$.validator.messages.duplicate = response;

Это работает для меня. Я нашел это здесь: http://blogs.teamb.com/craigstuntz/2009/01/15/37923/

7 голосов
/ 27 ноября 2013

Я следовал процессу, упомянутому на сайте 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);
3 голосов
/ 02 октября 2015

это сработало для меня

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 " на имя вашего метода в этом случае «дублировать» в обоих местах (функция 1-го аргумента функции addMethod и в теле функции addMethod $ .validator.messages ["methodName"])

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