2017-04-10 91 views
0

我有一個結帳窗體,我配置了jQuery驗證插件來驗證它。 對於信用卡號和信用卡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()); 

控制檯顯示:

對象{需要:真,creditCardNumber:真,cardVerificationCode: 真}

對象{要求:真實,編號:真,creditCardNumber:真,cardVerificationCode:真正}

爲什麼這兩個領域有creditCardNumber驗證和cardVerifiactionCode驗證?

輸入引用是正確的:

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

任何想法?

更新1

下面的代碼片段展示瞭如何創建視圖緩衝。$ ccNumber和視圖緩衝。$ ccCvc變量

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

'$視圖緩衝=== ccNumber $視圖緩衝將ccCvc'永遠是假的 - 這並不意味着jQuery的對象並不在同一個元素指向。你是如何創建這些變量的? –

+0

@RoryMcCrossan我更新了我的問題,回答「你是如何創建這些變量的?」 – ramiromd

回答

0

我發現這個問題。 ccn輸入和cvc輸入沒有名稱屬性(以防止將它們的值發送到服務器)。

當使用jQuery驗證插件隨時添加驗證器時,插件檢查元素的名稱以綁定添加的驗證器。

所以,對我形成完整的規則是:

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

此行爲STATICRULES插件的方法來定義。 。