高级JQuery验证:避免在某些条件下进行验证

高级JQuery验证:避免在某些条件下进行验证,jquery,validation,Jquery,Validation,我正在制作一个表单,我正在使用令人惊叹的JQuery验证插件() 此表格允许人们捐款,并指定他们是用支票还是信用卡付款。我使用单选按钮显示信用卡asp面板或支票asp面板 我的规则和信息都有效。但是,我希望创建一个规则,避免根据另一个因素(信用卡面板的可见性设置为“隐藏”)验证表单的某些部分(信用卡面板) 请原谅我将要告诉你们的代码——我去掉了大部分不相关的部分,只留下那些证明我的方法的部分 My body_onload javascrip方法: function body_onload() {

我正在制作一个表单,我正在使用令人惊叹的JQuery验证插件()

此表格允许人们捐款,并指定他们是用支票还是信用卡付款。我使用单选按钮显示信用卡asp面板或支票asp面板

我的规则和信息都有效。但是,我希望创建一个规则,避免根据另一个因素(信用卡面板的可见性设置为“隐藏”)验证表单的某些部分(信用卡面板)

请原谅我将要告诉你们的代码——我去掉了大部分不相关的部分,只留下那些证明我的方法的部分

My body_onload javascrip方法:

function body_onload()
{
    document.getElementById('<%=Cheque.ClientID %>').style.display = 'none';
    document.getElementById('<%=CreditCard.ClientID %>').style.display = 'none';
}
function body_onload()
{
document.getElementById(“”).style.display='none';
document.getElementById(“”).style.display='none';
}
选择付款方式的我的单选按钮:

<div style="width:430px; padding:5px;"><b>Payment Method:</b>&nbsp;&nbsp;
    <input type="radio" name="PaymentMethod" value="Cheque" onclick="ShowPaymentPanel(this.value)"/>Cheque &nbsp;&nbsp;&nbsp;<input type="radio" name="PaymentMethod" value="CreditCard" onclick="ShowPaymentPanel(this.value)"/>Credit Card</div>
付款方式:
支票信用卡
还有我冗长的验证方法:

$(document).ready(function(){

        jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
            phone_number = phone_number.replace(/\s+/g, ""); 
            return this.optional(element) || phone_number.length > 9 &&
                phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
        }, "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please specify a valid phone number");

        // validate form on keyup and submit
        $("#TransactionForm").validate({
            rules: {
                FirstName: "required",
                LastName: "required",
                Phone: {
                    required: true,
                    phoneUS: true
                },
                CCName:{
                    required: true
                },
                CCNumber:{      
                    required: true,
                    creditcard: true
                },
                CCExpiry:{
                    required: true,
                    digits: true,
                    minlength: 4,   
                    maxlength: 4                    
                }
            },
            messages: {
                FirstName: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Required",
                LastName: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Required",
                Phone: {required: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Required"},
                CCName: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please enter the name on the card",
                CCNumber: {
                    required: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please enter the card number",
                    creditcard: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please enter a valid card number"
                },
                CCExpiry:  {
                    required: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please enter the expiry date",
                    minlength: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please enter as MMYY",
                    maxlength: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Please enter as MMYY",
                    digits: "<br/>&nbsp;&nbsp;&nbsp;&nbsp;Date must be numeric"
                }
            }
        });
    });
$(文档).ready(函数(){
jQuery.validator.addMethod(“phoneUS”,函数(phone\u编号,元素){
电话号码=电话号码。替换(/\s+/g,“”);
返回此。可选(元素)| |电话号码。长度>9&&
电话号码。匹配(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
},“
请指定一个有效的电话号码”); //在keyup上验证表单并提交 $(“#交易表单”).validate({ 规则:{ 名字:“必选”, 姓氏:“必需”, 电话:{ 要求:正确, 真的吗 }, 名称:{ 必填项:true }, 编号:{ 要求:正确, 信用卡:对 }, C验证:{ 要求:正确, 数字:对, 最小长度:4, 最大长度:4 } }, 信息:{ 名字:“
必需”, LastName:“
必需”, 电话:{必选:
必选“}, CCName:“
请在卡上输入姓名”, 编号:{ 必填:“
请输入卡号”, 信用卡:“
请输入有效的卡号” }, C验证:{ 必填项:“
请输入有效期”, minlength:“
请输入MMYY”, maxlength:“
请输入MMYY”, 数字:“
日期必须是数字” } } }); });

任何帮助都将不胜感激

验证插件允许这样做,对于不限于true/false的必需属性,您可以在规则中执行此操作:

CCNumber:{      
    required: "#<%=CreditCard.ClientID %>:visible",
    creditcard: "#<%=CreditCard.ClientID %>:visible"
}
CCNumber:{
必填项:“#:可见”,
信用卡:“#:可见”
}
此外,如果出于某种原因不受限制,您可以缩短onload中的其他语法:

$(function() {
    $("#<%=Cheque.ClientID %>").hide();
    $("#<%=CreditCard.ClientID %>").hide();
});
$(函数(){
$(“#”)隐藏();
$(“#”)隐藏();
});

但是,我建议对它们应用“隐藏”css样式以避免任何可能的闪烁,然后只使用
$(“#”)show()语法,以在您所做的任何操作触发它时显示它们。不管你用什么方法,可见选择器都会工作,它的行为和声音一模一样。

谢谢,这正是我需要的!