2012-03-04 46 views
1

我的HTML代碼:JQuery的自定義驗證不起作用

<select class="validateCardNotExpired" id="order_credit_card_expiration_month"> 
<option value="1">Jan</option> 
<option value="2">Feb</option> 
.......... 
</select> 

<select class="validateCardNotExpired" id="order_credit_card_expiration_year"> 
<option value="2012">2012</option> 
<option value="2013">2013</option> 
...... 
</select> 

JavaScript代碼:

$(document).ready(function() { 

jQuery.validator.addMethod("validateCardNotExpired", function(value, element, params){ 
     alert("validate exp"); 
......... 
    }, 'Your card has expired.'); 

$("#order_form").validate({ 
tried also: 
jQuery.validator.setDefaults({ 

    rules: { 
     order_credit_card_expiration_month: { 
      validateCardNotExpired: { 
       month: '#order_credit_card_expiration_month', 
       year: '#order_credit_card_expiration_year' 
      } 
     }, 
     order_credit_card_expiration_year: { 
      validateCardNotExpired: { 
       month: '#order_credit_card_expiration_month', 
       year: '#order_credit_card_expiration_year' 
      } 
     } 
    } 
}); 

} 

的問題是:

當我使用(如建議在每一個例子)具有三個參數的處理器:

function(value, element, params) 

警報顯示不出來(似乎JQ驗證引擎遇到了一些例外,順便說一句,如何抓住它在這種情況下?)

當我刪除了第三個參數:

function(value, element) 

警報顯示出來。

似乎「規則」在任何情況下都被忽略。

什麼可能是錯的?

+0

需要顯示所有的自定義驗證方法....重要的部分是什麼它返回哪些上面丟失。發佈一些html格式。規則名稱必須匹配字段名稱,不知道這是你在做什麼 – charlietfl 2012-03-04 18:06:13

回答

1

所有的問題都是因爲驗證插件通過名稱而不是id來標識控件。

+0

你是否成功解決這個問題而不更改名稱?我有一個情況,我們有相同名稱的文本字段(映射到一個struts 2 String []),但驗證將無法正常工作,因爲這一點。 – tom 2012-07-16 08:31:19

0

我想用你的功能,正確的方法是如下:

jQuery.validator.addMethod("validateCardNotExpired", function(value, params, element){ 
     alert("validate exp"); 
......... 
    }, 'Your card has expired.'); 

基本元素應該是在功能上第三個參數。

+0

想象一下,我已經刪除了這個處理程序的任何內容,只留下警報。在這種情況下,傳遞參數的順序沒有區別。實際上(假設)異常不在這個處理程序內部,而是在其外部,並且只有很多參數很重要。 – Paul 2012-03-04 18:13:24

+0

從調用自定義處理程序的地方摘錄jquery.validate.js:var result = $ .validator.methods [method] .call(this,element.value.replace(/ \ r/g,「」), element,rule.parameters);所以,第一個參數是值(「this」會透明地處理處理程序),然後是元素和參數。 – Paul 2012-03-04 18:36:00