validar jQuery – definir regras condicionais com base na seleção do usuário

É possível configurar facilmente uma regra condicional com o jQuery validate,

Simplesmente eu estou tentando adicionar alguma lógica que diz, se a checkbox de seleção ‘A’ está marcada – então o campo ‘A’ deve ser preenchido, se a checkbox de seleção ‘B’ for preenchida, os campos ‘B1’ e ‘B2’ devem ser preenchidos.

por exemplo, se uma checkbox de seleção com o nome ‘paypal’ estiver marcada – então o campo chamado ‘paypal_address’ deve ser preenchido.

Minha lógica existente é a seguinte:

 $(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'); } }); 

ATUALIZAR

Usando o método abaixo do Rohit eu quase consegui que funcionasse perfeitamente. Meu formulário tem três checkboxs de seleção (somente uma pode ser selecionada) 1. Paypal 2. Banco 3. Check / Check

Se o Paypal estiver marcado (por padrão, é), então é necessário apenas o campo ‘paypal_email_address’, se Banco está marcado, então os campos ‘account_number’ e ‘sort_code’ são obrigatórios e, finalmente, se Check estiver marcado, check_payable_field ‘é obrigatório.

// eu tenho isso até agora $ (“.paymentMethod”) .on (“clique”, function () {var payment_method = $ (this) .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; } 

});

Na verdade, o jQuery Validate suporta isso diretamente, usando expressões de dependência .

Tudo o que você precisa fazer é alterar suas opções de validação como esta:

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

É isso aí!

Você pode usar um método de validação personalizado. Por exemplo:

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

então use em suas regras:

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

Dê uma olhada: http://jqueryvalidation.org/jQuery.validator.addMethod/

Edit: Eu não entendi a pergunta corretamente no começo, peço desculpas por isso: P Mas, aqui está uma solução que deve funcionar.

O que você pode fazer é verificar se a checkbox de seleção está ou não marcada e, em seguida, definir a regra necessária para paypal_address como tal:

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

E então nas regras você pode adicionar:

  paypal_address : { required: checked }