【问题标题】:jQuery Validate: Validate that one field, or both fields of a pair are requiredjQuery Validate:验证一个字段,或者一对的两个字段都是必需的
【发布时间】:2013-09-24 22:17:56
【问题描述】:

我有一个要验证的表单,它有两个字段:

<div class="entryForm">
    <div class="formField">
        <label for="fieldEmailAddress">Email address:</label>
        <input type="email" name="fieldEmailAddress" id="fieldEmailAddress"/>
    </div>
    <div class="formField">
        <label for="fieldMobileNumber">Mobile number:</label>
        <input type="text" name="fieldMobileNumber" id="fieldMobileNumber"/>
    </div>
</div>

这是我的 jQuery 验证接线:

<script type="text/javascript">
    $(document).ready(function () {
        $('#form1').validate({ rules: { fieldMobileNumber: { phoneUS: true } } });
    });
</script>

我想做的是添加一个额外的验证规则:如果 fieldEmailAddress 和 fieldMobileNumber 都为空,则表单无效。换句话说,我想让它至少需要 fieldEmailAddress 或 fieldMobileNumber 之一。似乎大多数 jQuery Validation 自定义方法都设计为一次仅适用于一个字段 - 我需要同时验证两者。

有什么想法吗?

【问题讨论】:

  • 是否需要在“验证”插件中完成?
  • @doitlikejustin - 我正在使用 jQuery validate 来验证当前表单。我认为有一种方法可以使用 jQuery validate 根据我的规则来验证那些字段,我认为我可以使用它周围的东西。我会仔细看看你的答案 tomarrow(这里是 EOD),​​但它看起来超级有希望。
  • 只需使用additional-methods.js文件中包含的require_from_group方法。

标签: javascript jquery jquery-validate


【解决方案1】:

您可以绕过验证插件并进行如下检查:

$("#form1").submit(function() {
    var email = $('#fieldEmailAddress');
    var phone = $('#fieldMobileNumber');

    if(email.val() == '' && phone.val() == '') {
        alert('Fill out both fields');
    }
    else if(email.val() == '') {
        alert('Email, please...');
    }
    else if(phone.val() == '') {
        alert('Phone, please...');      
    }
    else {
        alert('Yay!');
    }   
});

【讨论】:

    【解决方案2】:

    您只需要包含the additional-methods.js file 并使用require_from_group 方法。

    require_from_group: [x, '.class']
    
    // x = number of items required from a group of items.
    
    // .class = class assigned to every form element included in the group.
    

    jQuery

    $(document).ready(function () {
    
        $('#form1').validate({
            rules: {
                fieldMobileNumber: {
                    phoneUS: true,
                    require_from_group: [1, '.mygroup']
                },
                fieldEmailAddress: {
                    require_from_group: [1, '.mygroup']
                }
            },
            groups: {
                theGroup: 'fieldMobileNumber fieldEmailAddress'
            }
        });
    
    });
    

    class="mygroup" 添加到您需要组合在一起的每个输入...

    <input type="email" name="fieldEmailAddress" id="fieldEmailAddress" class="mygroup" />
    

    最后,可选择使用groups 选项将消息集中到一个...

    groups: {
        theGroup: 'fieldMobileNumber fieldEmailAddress'
    }
    

    工作演示http://jsfiddle.net/CYZZy/

    如果您不喜欢验证消息的放置位置,可以使用errorPlacement 回调函数对其进行调整。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多