2013-10-23 102 views
29

设置条件规则是否可以轻松地设置与jQuery条件规则验证,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'); 
    } 
}); 

UPDATE

使用下面的方法从罗希特我已经几乎得到了这个工作完美.. 我的形式有三个复选框(只能有一个选择) 1.贝宝 2.银行 3.检查/检查

如果贝宝被选中(默认情况下它是),那么只有具备“paypal_email_address”呸ld需要,如果银行被选中,那么'account_number'&'sort_code'字段是必需的&最后如果检查被选中'check_payable_field'是必需的。

//我有了这个迄今 $( “.paymentMethod”)。在( “点击”,函数(){VAR PAYMENT_METHOD = $(本).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; 
    } 

});

回答

71

jQuery验证居然直接支持这一点,使用dependency expressions

所有你需要做的是改变你这样的验证选项:

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

这就是它!

+0

谢谢你会给它一个镜头! :) – Zabs

+0

非常感谢你的链接。现在我知道有一个选择器:填充 – Dummy

+0

如果我们使用远程规则的手段,那么这将无法正常工作。它只会检查所需的属性,但远程将像正常流程一样工作。 – Varadha31590

3

编辑:我一开始并没有正确理解这个问题,我对此表示歉意:P但是,这里有一个应该工作的解决方案。

你可以做的是检查复选框是否被选中,然后设置paypal_address因为这样所需的规则:

var checked = false; 
$("#paypalCheckbox").on("click", function() { 
     checked = $('#paypalCheckbox').is(':checked'); 
    }); 

然后在规则中,您可以添加:

paypal_address : { 
required: checked 
} 
+0

嗨,队友 - 我有验证工作正常 - 我想要做的是有额外的规则基于用户选择什么。即g 如果用户选中“paypal”复选框,则需要填写名为“paypal_address”的字段。如果他们没有选择这个,那么他们可以跳过这个字段,而不需要将有效的电子邮件地址添加到paypal_address字段。 – Zabs

+1

更新了答案:) – Rohit

+0

谢谢,我会给它一个机会 – Zabs

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/