是否可以使用jQuery validate轻松设置条件规则,
简单地说我正在尝试添加一些逻辑,如果选中复选框'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的以下方法,我几乎可以完美地完成这项工作.. 我的表单有三个复选框(只能选择一个) 贝宝 银行 3.检查/检查
如果Paypal被选中(默认情况下是这样),那么只需要'paypal_email_address'字段,如果选中了Bank,则'account_number'&amp; 'sort_code'字段是必需的&amp;最后,如果选中Check,则需要'check_payable_field'。
//到目前为止我已经知道了 $(“。paymethod”)。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;
}
});
答案 0 :(得分:83)
jQuery Validate实际上直接使用dependency expressions支持此功能。
您需要做的就是更改您的验证选项:
$('#myform').validate({
rules: {
fieldA: {
required:'#checkA:checked'
}
}
});
就是这样!
答案 1 :(得分: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
},
....
}
答案 2 :(得分:3)
编辑:我最初没有正确理解这个问题,我为此道歉:P但是,这是一个应该有效的解决方案。
您可以做的是检查复选框是否已选中,然后为paypal_address设置所需的规则:
var checked = false;
$( "#paypalCheckbox" ).on( "click", function() {
checked = $('#paypalCheckbox').is(':checked');
});
然后在规则中添加:
paypal_address : {
required: checked
}
答案 3 :(得分:0)
jQuery将条件作为函数结果进行验证(添加到上面的Ryley的评论中):
$("#Form_Id").validate({
rules: {
CompletedBy: "required", //straight forward validation of field
Contact_No: "required",
Location: { required: noTableRow }//if no table row, make Location mandatory
}
});
//checks whether a table row exists
function noTableRow() {
return $("tr.tr_class").length == 0;
}