是否可以使用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的以下方法,我几乎可以完美地运行它。我的表单有三个复选框(只能选择一个)1.贝宝2.银行3.支票/支票
[如果选中了Paypal(默认情况下是),则仅需要'paypal_email_address'字段,如果选中了Bank,则需要'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;
}
});
jQuery Validate实际上使用dependency expressions直接支持此功能。
您需要做的就是这样更改验证选项:
$('#myform').validate({
rules: {
fieldA: {
required:'#checkA:checked'
}
}
});
就是这样!
您可以使用自定义验证方法。例如:
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
},
....
}
[编辑:起初我不太清楚这个问题,对此我深表歉意:P但是,这是一个可行的解决方案。
您可以做的是检查是否已选中该复选框,然后按如下所示为paypal_address设置所需的规则:
var checked = false;
$( "#paypalCheckbox" ).on( "click", function() {
checked = $('#paypalCheckbox').is(':checked');
});
然后在规则中可以添加:
paypal_address : {
required: checked
}
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;
}