Подтвердить что ты не робот

JQuery validate - установка условных правил на основе выбора пользователя

Можно ли легко настроить условное правило с помощью проверки 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');
    }
});

ОБНОВЛЕНИЕ

Используя метод, приведенный ниже, Rohit, я почти полностью обработал это. У моей формы три флажка (можно выбрать только один)  1. Paypal  2. Банк  3. Проверка/проверка

Если Paypal проверен (по умолчанию он есть), то требуется только поле "paypal_email_address", если банк установлен, тогда требуются поля "account_number" и "sort_code", и, наконец, если Check проверен, требуется "check_payable_field".

//У меня это до сих пор    $ ( ".paymentMethod" ).on("click", 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;
  }

});

4b9b3361

Ответ 1

jQuery Validate фактически поддерживает это напрямую, используя выражения .

Все, что вам нужно сделать, это изменить параметры проверки следующим образом:

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

Что это!

Ответ 2

Вы можете использовать специальный метод проверки. Например:

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/

Ответ 3

Изменить: я не понял вопрос правильно, я извиняюсь за это: P Но вот решение, которое должно работать.

Что вы можете сделать, это проверить, установлен ли флажок или нет, а затем установить необходимое правило для paypal_address как такового:

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

И затем в правилах вы можете добавить:

 paypal_address : {
 required: checked
 }