2012-03-04 44 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