需要一组输入或另一组

时间:2014-06-06 20:06:18

标签: jquery jquery-validate

我有一个表单,其中包含一组用于收集SSN(3个字段)的输入和另一个用于收集EIN(2个字段)的组。我怎样才能使SSN字段或EIN字段成为必需而不是两者都是?

<input name="ssn_1" type="text" class="ssn" value="" style="width: 7.3%; height: 3.2%; top: 37.8%; left: 68.1%;" maxlength="3">
<input name="ssn_2" type="text" class="ssn" value="" style="width: 4.9%; height: 3.2%; top: 37.8%; left: 77.6%;" maxlength="2">
<input name="ssn_3" type="text" class="ssn" value="" style="width: 9.5%; height: 3.2%; top: 37.8%; left: 84.7%;" maxlength="4">
<input name="ein_1" type="text" class="ein" value="" style="width: 4.9%; height: 3.2%; top: 43.9%; left: 68.1%;" maxlength="2">
<input name="ein_2" type="text" class="ein" value="" style="width: 16.7%; height: 3.2%; top: 43.9%; left: 75.1%;" maxlength="7">

谢谢,如果您有任何疑问或需要进一步的信息,请告诉我

1 个答案:

答案 0 :(得分:1)

这里有两种可能的解决方案......

1)简单的解决方案:将SSN组合成一个九位数的单个输入字段,并在写入数据库之前处理后端的数据格式。对EIN字段执行相同操作。然后,您可以使用require_from_group方法自动生成EIN或SSN。 IMO,用户(以及更现代的GUI)更容易一次只输入九位数而不是多个字段之间的标签。毕竟,例如,您几乎看不到三个字段用于在任何网站上输入电话号码,而且几乎从不在最新的网站上输入。

HTML:

<input name="ssn" type="text" class="mygroup" />
<input name="ein" type="text" class="mygroup" />

.validate()规则:

rules: {
    ssn: {
        digits: true,         // <- numbers only
        rangelength: [9,9],   // <- force exactly 9 characters
        require_from_group: [2, '.mygroup'] // <- SSN OR EIN is required, not both
    },
    ein: {
        digits: true,       
        rangelength: [9,9], 
        require_from_group: [2, '.mygroup'] // <- SSN OR EIN is required, not both
    }
}

我还设置digitsrangelength规则以强制字段上的九位数字,而不是HTML中的简单maxlength属性。


2)更复杂的解决方案:否则,保留五个字段,使用blurchange等事件来触发the .rules() methods。使用.rules('add')向字段添加规则,使用.rules('remove')删除字段上的所有规则。例如,如果用户填写了SSN字段,您可以从EIN字段中动态删除required规则。这里有一个技巧:如果你的选择器针对多个元素,你必须使用jQuery .each()

示例:

$('#oneField').rules('add', {  // <- single element in selector
    required: true
});

$('.manyFields').each(function() {  // <- multiple elements in selector
    $(this).rules('add', {
        required: true
    });
});