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;
}
});
Ответы
Ответ 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
}