jQuery验证-根据用户选择设置条件规则

问题描述 投票:34回答:4

是否可以使用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;
  }

});

javascript jquery jquery-validate
4个回答
87
投票

jQuery Validate实际上使用dependency expressions直接支持此功能。

您需要做的就是这样更改验证选项:

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

就是这样!


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
    },
    ....
}

看看: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
 }

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.