我有一个结帐表单,我配置了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]')
};
答案 0 :(得分:0)
我发现了问题。 ccn输入和cvc输入没有名称属性(以防止将其值发送到服务器)。
使用jQuery Validation插件动态添加验证器时,插件会检查元素的名称以绑定添加的验证器。
所以,我的表格的完整规则是:
{
// other rules
...
// all rules for no name inputs
'': {
creditCardNumber: true,
creditCardCvc: true
}
}
此行为在staticRules插件方法中定义。