2009-06-10 249 views
18

我已经创建了一个jquery的验证器插件的方法,它的工作原理与远程规则一样。区别在于我想显示一个动态的错误消息(基于ajax响应)。jquery验证器addmethod自定义消息

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'); 
}, ''); 

它的工作原理...之类的....它设置消息,但最初并没有显示它(如果您验证领域的第二次,显示消息)。

有什么建议吗?

(也许远程规则提供了这个功能...我无法找到的文档中的任何东西)

回答

15

这里的解决方案....调用该对象的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'); 
}, ''); 

在jquery.validate.js(行917 - 919)从 “远程” 采取

+4

当我这样做时,默认的错误消息是写完自定义消息。 – aqs 2013-03-12 13:31:16

9

一直在寻找解决这个问题,以及,并发现这个...

在原有的EX充足的,如果你改变这一行:

object_settings.messages[element.name] = response; 

要这样:

$.validator.messages.duplicate = response; 

这对我的作品。我在这里找到它: http://blogs.teamb.com/craigstuntz/2009/01/15/37923/

+0

+1似乎比调用`showErrors`更好 – 2012-07-31 20:56:44

6

我按照网站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

这个工作对我来说

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; 
},''); 

确保在这两个地方这种情况下,“复制”与您的方法名 取代“方法名”(addMethod功能1 ARG并在addMethod函数体$ .validator.messages [“methodName”])