2011-01-13 50 views
2

所以我有一個註冊系統,用戶可以選擇他們是要現在用信用卡支付還是以後用支票支付。如果他們選擇使用信用卡付款,那麼需要驗證持有信用卡信息的字段。但是,如果他們選擇稍後支票支付,那麼需要隱藏那些持有信用卡信息的字段,因此也會關閉對這些字段的驗證。這是我理解的jQuery的代碼應工作:使用基於複選框的jQuery進行驗證

$('.cc_check').click(function(){ 


    $('.ccinfo').toggle() 

    if($(".ccinfo").is(":visible")){ 
    $(".cc").validate({ 
    rules: { 
     card_number: { 
     required: true, 
     digits: true, 
     creditcard: true 
     }, 
     card_holder:{ 
     required: true 
     }, 
     card_month: { 
     required: true, 
     digits: true, 
     minlength: 2, 
     maxlength: 2, 
     min: 1, 
     max: 12 
     }, 
     card_year: { 
     required: true, 
     digits: true, 
     minlength: 2, 
     maxlength: 2, 
     min: 11 
     } 
    }, 
    messages: { 
     card_number: { 
     required: "Please enter a credit card number" 
     }, 
     card_holder:{ 
     required: "Please enter a credit card holder" 
     }, 
     card_month: { 
     required: "Please enter a credit card expiring month", 
     min: "That is not a month", 
     max: "That is not a month" 
     }, 
     card_year: { 
     required: "Please enter a credit card expiring year", 
     min: "That year is in the past"  
     } 
    } 
    }); 
    } 
    }); 

下面是相應的HTML代碼:

所以我的問題是真的是沒有辦法,我失去了一些東西?當用戶點擊類的複選框時,ccinfo類的錶行消失。我也檢查過,以確保if語句正常工作,並且在ccinfo可見時它會進入內部。我能否根據類名進行驗證,因爲我正在嘗試驗證類名爲cc的單個文本框。

任何幫助將不勝感激,這是我一直在掙扎了幾天的問題!

回答

3

我會設置disabled屬性的那些元素,你想禁用驗證(設置此屬性禁用驗證)。考慮到這一點,你的代碼變得更簡單,只需一個電話到validate()(驗證省略設置代碼,因爲我並沒有改變它,我肯定會移動它的點擊處理程序之外):

$('.cc_check').click(function() { 
    var $ccInfo = $(".ccinfo"); 
    var $inputs = $(".cc input:not(.cc_check):not(:submit)"); 
    $ccInfo.toggle(); 
    if ($ccInfo.is(":visible")) {   
     $inputs.removeAttr("disabled"); 
    } 
    else { 
     $inputs.attr("disabled", "disabled"); 
    } 
}); 

看到一個工作示例:http://jsfiddle.net/andrewwhitaker/PMTTK/。請注意,如果您選中該複選框,則會禁用正確的字段,並且表單已成功發佈。當disabled屬性被刪除時,驗證將重新啓用。

+0

我可以澄清這條線是什麼嗎? var $ inputs = $(「。cc輸入:不((.cc_check):not(:submit)」); – Chris 2011-01-14 19:48:54