jQueryvalidation – 两个字段,只需要填写一个

我正在使用我的表单上的jQueryvalidation插件 。 在我的表格中,我有一个“电话”字段和一个“手机号码” 领域。

我将如何去做,所以用户必须填写其中一个,但它可以是任何领域?

这看起来像你需要使用依赖callback

这将允许你做什么是:

根据给定callback的结果,创build所需的元素。

然后,您可以在两个电话字段上放置一个requiredvalidation规则,根据函数callback的返回,只需要这两个字段; 因此您只能在移动领域为空白的情况下,在电话领域规定要求这条规则,反之亦然。

这在理论上是未经testing的

 rules: { telephone: { required: function(element) { return $("#mobile").is(':empty'); } }, mobile: { required: function(element) { return $("#telephone").is(':empty'); } } } 

一定要检查评论/其他答案可能的更新答案。

我认为这样做的正确方法是使用“require_from_group”方法。

你可以检查http://jqueryvalidation.org/require_from_group-method/

这个例子正是你正在寻找的东西:

 <input class="left phone-group" id="mobile_phone" name="mobile_phone"> <input class="left phone-group" id="home_phone" name="home_phone"> <input class="left phone-group" id="work_phone" name="work_phone"> <script> $( "#form" ).validate({ rules: { mobile_phone: { require_from_group: [1, ".phone-group"] }, home_phone: { require_from_group: [1, ".phone-group"] }, work_phone: { require_from_group: [1, ".phone-group"] } } }); </script> 

必须包含additional-methods.js

来到这里寻找相同的答案。 find上面的post非常有帮助。 谢谢。

我已经扩展了这个解决scheme来检查其他字段是否有效,而不仅仅是“不空”。 这确保用户在从移动字段中移除“所需”类之前input有效的电话号码,反之亦然。

 Mobile: { required: function(element) { return (!$("#Phone").hasClass('valid')); } }, Phone: { required: function(element) { return (!$("#Mobile").hasClass('valid')); } } 

要求是validation需要是C或(A和B)是必需的。 这件事对我来说是:

 $.validator.addMethod("multipeFieldValidator", function(value) { var returnVal = false; if($("#Cfield").val() != '' || ($("#Afield").val() != '' && $("#Bfield").val() != '')) { returnVal = true; } return returnVal; }, 'Either C or A and B is required'); $('#Afield.form-control').change(function(){ $(this).valid(); $("#Bfield").valid(); $("#Cfield").valid(); }); $('#Bfield.form-control').change(function(){ $(this).valid(); $("#Afield").valid(); $("#Cfield").valid(); }); $('#Cfield.form-control').change(function(){ $(this).valid(); $("#Bfield").valid(); $("#Afield").valid(); }); within rules I have Afield: "multipeFieldValidator", Bfield: "multipeFieldValidator", Cfield: "multipeFieldValidator"