我有一个表单,其中包含一组用于收集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">
谢谢,如果您有任何疑问或需要进一步的信息,请告诉我
答案 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
}
}
我还设置digits
和rangelength
规则以强制字段上的九位数字,而不是HTML中的简单maxlength
属性。
2)更复杂的解决方案:否则,保留五个字段,使用blur
或change
等事件来触发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
});
});