2009-06-10 141 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」])