jQuery验证 - 两个字段,只需要填写一个

Pro*_*cop 49 jquery jquery-validate

我正在我的表单上使用jQuery Validation Plugin.在我的表格上,我有一个'电话'字段和一个'手机号码' 领域.

我将如何制作它以便用户必须填写其中一个,但它可以是字段?

Jef*_*ert 65

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

这将允许您做的是:

根据给定回调的结果,使元素成为必需元素.

然后,您可以required根据函数回调的返回,在两个电话字段上放置验证规则; 因此,您可以在电话字段上设置规则,以便仅在移动字段为空时才需要此规则,反之亦然.

这是未经测试但在理论上

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

请务必查看评论/其他答案,以获取可能的更新答案.

  • (现在)有一种更简单的方法:`required:"#mobile:empty"` (20认同)
  • @Milimetric:同意.根据文档尝试使用`:filled`或`:blank`:http://jqueryvalidation.org/documentation/. (6认同)
  • 在textarea元素上使用它有一个问题.`:empty`对于textarea来说是真的.通常,`:empty`不适合用于验证,您应该寻找替代方案. (3认同)
  • 我有一个类似的要求,除了我只需要一个常规消息显示在窗体的顶部(或底部)而不是窗体中每个字段旁边的错误消息.在引用的示例中,如果两个字段都为空,我将在每个字段旁边看到相同的错误消息,这是多余的.至少在我的情况下,我需要一些类似"至少必须填充一个字段"的内容.在表格的顶部. (2认同)

eve*_*ans 42

我认为正确的方法是使用"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>
Run Code Online (Sandbox Code Playgroud)

必须包含additional-methods.js

  • 这应该是公认的答案!它是api的一部分,最容易使用. (4认同)
  • 被视为已接受的答案,因为这是最有用的,并使用插件的内置功能而不是重新设计的车轮解决方案. (3认同)
  • 这种方法效果更好.只要在分组字段中键入内容,消息就会更清晰,错误也会清除.请注意,您需要包含additional-methods.js (2认同)
  • 这个对我很有用.不要忘记包含`additional-methods.min.js`,否则你会收到错误 (2认同)

Bar*_*rbs 27

来到这里寻找相同的答案.发现以上帖子非常有帮助.谢谢.

我已经扩展了这个解决方案,以检查其他字段是否实际上是有效的,而不仅仅是"非空".这确保用户在从移动字段移除"必需"类之前输入有效的电话号码,反之亦然.

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