添加规则的奇怪行为

时间:2017-04-10 14:54:39

标签: jquery validation

我有一个结帐表单,我配置了jQuery Validate插件来验证它。 对于信用卡号和信用卡cvc字段,我为插件定义了两种新方法:

$.validator.addMethod('creditCardNumber', function(value, element) {
    return adapter.checkNumber(value, element);
}, 'Tarjeta desconocida');

$.validator.addMethod('cardVerificationCode', function(value, element) {
    return adapter.checkCvc(value, element);
}, 'Cvc invalido');

// reference to ccn field
viewCache.$ccNumber.rules('add', {
   creditCardNumber: true
});

// reference to cvc field
viewCache.$ccCvc.rules('add', {
   cardVerificationCode: true
});

当我用以下方法检查两个字段的规则时:

    console.log(viewCache.$ccNumber.rules());
    console.log(viewCache.$ccCvc.rules());

控制台显示:

  

Object {required:true,creditCardNumber:true,cardVerificationCode:   是的}

     

Object {required:true,number:true,creditCardNumber:true,cardVerificationCode:true}

为什么两个字段都有creditCardNumber验证器和cardVerifiactionCode验证器?

输入引用是正确的:

console.log(viewCache.$ccNumber.is(viewCache.$ccCvc)); // FALSE
console.log(viewCache.$ccNumber.length, viewCache.$ccCvc.lenght); // 1,1

有什么想法吗?

更新1

以下代码片段显示了我如何创建viewCache。$ ccNumber和viewCache。$ ccCvc变量

var viewCache = {
   $ccNumber: $('[data-intellicard] [data-ccn]'),
   $ccCvc: $('[data-intellicard] [data-cvc]')
};

1 个答案:

答案 0 :(得分:0)

我发现了问题。 ccn输入和cvc输入没有名称属性(以防止将其值发送到服务器)。

使用jQuery Validation插件动态添加验证器时,插件会检查元素的名称以绑定添加的验证器。

所以,我的表格的完整规则是:

{
   // other rules
   ...
   // all rules for no name inputs
   '': {
      creditCardNumber: true,
      creditCardCvc: true
   }
}

此行为在staticRules插件方法中定义。