jQuery验证插件 - 仅在元素可见时验证隐藏元素

9

我有一个表单,其中有一个“您的账单地址是否与您的送货地址相同”的字段。如果用户点击“否”单选按钮,则会显示隐藏的ul#billingAddress。如果ul具有display:block,则ul#billingAddress中包含的字段是必填的。

我该如何编写适用于jquery validate.js的自定义addMethod,仅在字段可见时要求这些字段?以下是我目前无法正常工作的代码。

$.validator.addMethod ("BillingSameAsShipping", function(value, element) {
   var billingFields = ['billingAddress1','billingAddress2','billingCity','billingState','bilingZip']
   if ($("#billingAddress").is('visible') && billingFields.val('') {
       return false;
   } else 
       return true;
 }, "Please fill in the required billing information" );

很显然,这是有问题的。我需要让它对变量中的每个元素都起作用。

谢谢!


你尝试过将它们不仅设置为不可见,还将它们禁用吗?这只是一个猜测,但由于禁用的表单字段无论如何都不会被传输,我预计在它们上面不会进行任何验证。 - Tomalak
我不应该让它们失效,我只想在它们可见时进行验证。除非让它们失效更容易? - Dirty Bird Design
我的意思是让它们既不可见又不可用。使用jQuery,这很容易实现。 - Tomalak
是的,我知道如何做到这一点,我更愿意只在可见时将它们设为必填项,就像我的原始问题所述。 - Dirty Bird Design
1个回答

19
问题在于可见性检查中的这部分代码:.is('visible'),需要改为:.is(':visible') 以使用:visible选择器


作为一种替代方案,您可以使用ignore选项来更轻松地完成所需的操作,例如:
$("#myForm").validate({
  //other options
  ignore: ':hidden'
});

如果需要,这种方法可以让你使用标准的必需规则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接