通过快速阅读文档,看起来验证器的默认方法旨在对不了解其他字段的字段进行操作。定义自己的可能会更整洁:
function XOR_value_validator(value, el, args) {
var otherValue = $(args[0]).val();
return (value && !otherValue) || (!value && otherValue);
}
jQuery.validator.addMethod(
'XOR_with',
XOR_value_validator,
jQuery.validator.format('{1}')
);
并使用类似的东西:
mobile : {
XOR_with: [
'#telephone', // assumed to be a jQuery selector for an element with a value()
'Please enter either a telephone number or a mobile number.' // error message
]
},
telephone: {
XOR_with: [
'#mobile', // assumed to be a jQuery selector for an element with a value()
'Please enter either a telephone number or a mobile number.' // error message
]
}
http://jqueryvalidation.org/jQuery.validator.addMethod
这没有保修!:PI 在此文本区域中完全未经测试(来自文档)编写它。
编辑:
关于评论:
如果在用户填写表单时不断执行此代码,您可能会相应地启用/禁用表单元素的功能。但是,我建议不要这样做,因为您的这部分代码应该只关心验证而不是用户体验。
要扩展两个以上字段的功能(同样,未经测试),您可以这样做:
function one_field_allowed_validator(value, el, args) {
var otherFields = args[0],
valuesFound = value ? 1 : 0;
for (var i = 0, limit = otherFields.length; i < limit; ++i) {
var val = $(otherFields[i]).val();
if (val && ++valuesFound === 2) {
return false;
}
}
return valuesFound !== 0;
}
jQuery.validator.addMethod(
'Allow_one_with',
one_field_allowed_validator,
jQuery.validator.format('{1}')
);
用法:
mobile : {
Allow_one_with: [
['#telephone', '#work'],
'Please enter a telephone number, a mobile number or a work number.'
]
},
telephone: {
Allow_one_with: [
['#mobile', '#work'],
'Please enter a telephone number, a mobile number or a work number.'
]
},
work: {
Allow_one_with: [
['#mobile', '#telephone']
'Please enter a telephone number, a mobile number or a work number.'
]
}
现在感觉很hacky!对于 Allow_one_with 组中的每个附加字段,您必须更新所有现有的 Allow_one_with 验证(以包括新字段和可能的新错误消息)。我不愿意将我的方法用于XOR之外。