2013-02-26 84 views
0

有沒有基於驗證結果來格式化消息的方法。我有以下基於jQuery驗證響應的消息

jQuery.validator.addMethod("feed", function(value, element) { 
    var retVal = true; 
      //Ajax call here which returns 
      var retMsg = ajax() 

      if(retMsg == "one") { 
       //Show error as "not valid url" 
      } else if(retMsg == "2") { 
       //Show error as "not reachable url" 
      } 
    return retVal; 
}, << CUSTOMIZE MESSAGE HERE BASED ON Validation OUTCOME >>); 

回答

0

使用Validate插件中的每個方法,規則都只是通過/失敗。當它們失敗時,你會收到一條消息;當他們通過時,沒有消息。 return true您的自定義方法,你通過(沒有消息)... return false,你失敗(消息)。

在插件中,默認情況下,「複合規則」用多種方法處理。下面的「複合規則」與四種方法例如處理...

rules: { 
    myfield: { 
     required: true, 
     digits: true, 
     minlength: 5, 
     email: true 
    } 
} 

但是,你正在嘗試做一個「複合規則」與一個單一的方法。

因此,合乎邏輯的解決方案是,您只需像插件那樣做;有兩種獨特的自定義方法。我更喜歡這種方法,因爲我們不必篡改消息放置。這就是所有「複合」規則如何由插件內部處理的。

jQuery.validator.addMethod("feedvalid", function(value, element) { 
    //Ajax call here which returns 
    var retMsg = ajax() 

    if (retMsg == "one") { 
     return false; // failed, show message 
    } else { 
     return true; 
    } 
}, "not a valid url"); 

jQuery.validator.addMethod("feedreach", function(value, element) { 
    //Ajax call here which returns 
    var retMsg = ajax() 

    if (retMsg == "2") { 
     return false; // failed, show message 
    } else { 
     return true; 
    } 
}, "not a reachable url"); 

模擬:http://jsfiddle.net/At555/

鍵入one2到輸入字段以 「模擬」 你的Ajax。


「醜陋」的方法:

或者,你必須從該插件控制的默認容器單獨創建&地方你自己的消息容器。您還需要邏輯來消除每次該字段通過驗證時的消息。這個解決方案有效,但它非常非常規,所以我不喜歡它。

jQuery.validator.addMethod("feed", function(value, element) { 
    //Ajax call here which returns 
    var retMsg = ajax() 

    if (retMsg == "one") { 
     $('#myErrContainer').text("not valid url"); 
     return false; // failed 
    } else if (retMsg == "2") { 
     $('#myErrContainer').text("not reachable url"); 
     return false; // failed 
    } else { 
     $('#myErrContainer').text(); 
     return true; // passed 
    } 
}, ""); 

模擬:http://jsfiddle.net/vnpG4/

鍵入one2到輸入字段以 「模擬」 你的Ajax。