2013-10-23 105 views
29

設置條件規則是否可以輕鬆地設置與jQuery條件規則驗證,jQuery驗證 - 基於用戶選擇

簡而言之我想要添加一些邏輯,它說,如果複選框「A」打勾 - 那麼必須完成字段'A',如果複選框'B'完成,則字段'B1'&'B2'必須完成。

例如,如果選中名爲「paypal」的複選框,則必須填寫名爲「paypal_address」的字段。

我現有的邏輯如下:

<script type="text/javascript"> 
$(document).ready(function() { 

$('#checkout-form').validate({ 
    rules: { 
     first_name: { 
      minlength: 2, 
      required: true 
     }, 
     last_name: { 
      minlength: 2, 
      required: true 
     }, 
     address_1: { 
      minlength: 2, 
      required: true 
     }, 
     address_2: { 
      minlength: 2, 
      required: true 
     }, 
     post_code: { 
      minlength: 2, 
      required: true 
     },    
     email: { 
      required: true, 
      email: true 
     }, 
     terms: { 
      required: true, 
     } 
    }, 
    errorPlacement: function(error, element) { 
     element.addClass('error'); 
    },   
    highlight: function (element) { 
     $(element).addClass('nonvalid') 
      .closest('.form-group').removeClass('error'); 
    }, 
    success: function (element) { 
     //element.addClass('valid') 
      //.closest('.form-group').removeClass('error'); 
      element.remove('error'); 
    } 
}); 

UPDATE

使用下面的方法從羅希特我已經幾乎得到了這個工作完美.. 我的形式有三個複選框(只能有一個選擇) 1.貝寶 2.銀行 3.檢查/檢查

如果貝寶被選中(默認情況下它是),那麼只有具備「paypal_email_address」呸ld需要,如果銀行被選中,那麼'account_number'&'sort_code'字段是必需的&最後如果檢查被選中'check_payable_field'是必需的。

//我有了這個迄今 $( 「.paymentMethod」)。在( 「點擊」,函數(){VAR PAYMENT_METHOD = $(本).VAL();

if (payment_method == 'paypal') { 
    paypal_checked = true; 
    } else if (payment_method == 'bank-transfer') { 
    bank_checked = true; 
    paypal_checked = false; 
    } else if (payment_method == 'cheque') { 
    cheque_checked = true; 
    paypal_checked = false; 
    } 

});

回答

71

jQuery驗證居然直接支持這一點,使用dependency expressions

所有你需要做的是改變你這樣的驗證選項:

$('#myform').validate({ 
    rules: { 
     fieldA: { 
      required:'#checkA:checked' 
     } 
    } 
}); 

這就是它!

+0

謝謝你會給它一個鏡頭! :) – Zabs

+0

非常感謝你的鏈接。現在我知道有一個選擇器:填充 – Dummy

+0

如果我們使用遠程規則的手段,那麼這將無法正常工作。它只會檢查所需的屬性,但遠程將像正常流程一樣工作。 – Varadha31590

3

編輯:我一開始並沒有正確理解這個問題,我對此表示歉意:P但是,這裏有一個應該工作的解決方案。

你可以做的是檢查複選框是否被選中,然後設置paypal_address因爲這樣所需的規則:

var checked = false; 
$("#paypalCheckbox").on("click", function() { 
     checked = $('#paypalCheckbox').is(':checked'); 
    }); 

然後在規則中,您可以添加:

paypal_address : { 
required: checked 
} 
+0

嗨,隊友 - 我有驗證工作正常 - 我想要做的是有額外的規則基於用戶選擇什麼。即g 如果用戶選中「paypal」複選框,則需要填寫名爲「paypal_address」的字段。如果他們沒有選擇這個,那麼他們可以跳過這個字段,而不需要將有效的電子郵件地址添加到paypal_address字段。 – Zabs

+1

更新了答案:) – Rohit

+0

謝謝,我會給它一個機會 – Zabs

5

您可以使用自定義驗證方法。 例如:

jQuery.validator.addMethod("checkA", function(value, element) { 
    return YourValidationCode; // return true if field is ok or should be ignored 
}, "Please complete A"); 

然後在規則中使用它:

rules: { 
    .... 
    field_a: { 
     required: false, 
     checkA: true 
    }, 
    .... 
} 

請看: http://jqueryvalidation.org/jQuery.validator.addMethod/