【发布时间】:2014-09-23 20:38:57
【问题描述】:
我的表单上有两个电话字段 - 电话和电话 2。只需要其中之一。无论我尝试了什么,我都无法使验证生效。我已经尝试过回调和自定义验证器,但似乎我无法让它工作。我希望它工作的方式是检查每个字段,如果两者都是空的,则在每个字段下显示一条自定义消息。如果其中一个或两个都有数据,则继续验证每个数据的正确性。如果/当用户再次单击提交时,请再次检查两个字段,如果其中一个或两个都有状态消息,则再次删除消息开始验证。我只是不能'似乎让它工作,我不知道它是否像每次点击提交按钮时强制插件重新验证所有(或自定义选择的)字段一样简单。
希望这是有道理的。如果不是,请询问更多详细信息。我已经为此苦苦挣扎了一段时间,并且有棉花头。
基本上,两个字段之一需要有数据并且该数据需要有效。
我在这里看到了关于 stackoverflow 的帖子:Conditional validation with BootstrapValidator 但看起来答案是针对不同的插件。
这是我一直在尝试的:
.bootstrapValidator({
live: 'disabled',
message: 'This value is not valid',
fields: {
phone: {
group: '.col-md-3',
validators: {
callback: {
callback: function(value, validator, $field) {
field_name = $($field).attr('name');
if (value.length == 0 && $('#phone2').val() == '') {
return {
valid: false,
message: 'at least one phone number is required'
}
}
else
{
if ( $('#phone2') == '' )
{
$('#defaultForm')
.bootstrapValidator('resetField', $('#phone2') )
//.bootstrapValidator('updateStatus', $('#phone2'), 'NOT_VALIDATED')
;
}
}
value = value.replace(/\D/g, '');
if ( value != '' ) {
if ( !((/^(?:(1\-?)|(\+1 ?))?\(?(\d{3})[\)\-\.]?(\d{3})[\-\.]?(\d{4})$/).test(value) && (value.length == 10)) ) {
//alert("PHONE DID NOT PASS VALIDATION");
return {
valid: false,
message: 'Phone number is not valid'
}
}
else
{
return true;
}
}
else
{
$('#defaultForm')
.bootstrapValidator('resetField', field_name )
.bootstrapValidator('updateStatus', field_name, 'NOT_VALIDATED')
;
return true;
}
}
}
}
},
phone2: {
group: '.col-md-3',
validators: {
callback: {
callback: function(value, validator, $field) {
field_name = $($field).attr('name');
if (value.length == 0 && $('#phone').val() == '') {
return {
valid: false,
message: 'at least one phone number is required'
}
}
else
{
if ( $('#phone') == '' )
{
$('#defaultForm')
.bootstrapValidator('resetField', $('#phone') )
//.bootstrapValidator('updateStatus', $('#phone'), 'NOT_VALIDATED')
;
}
}
value = value.replace(/\D/g, '');
if ( value != '' ) {
if ( !((/^(?:(1\-?)|(\+1 ?))?\(?(\d{3})[\)\-\.]?(\d{3})[\-\.]?(\d{4})$/).test(value) && (value.length == 10)) ) {
//alert("PHONE2 DID NOT PASS VALIDATION");
return {
valid: false,
message: 'Phone number2 is not valid'
}
}
else
{
return true;
}
}
else
{
$('#defaultForm')
.bootstrapValidator('resetField', field_name )
.bootstrapValidator('updateStatus', field_name, 'NOT_VALIDATED')
;
return true;
}
}
}
}
}
}
})
【问题讨论】:
-
坏消息是,对于 JQuery Validate:stackoverflow.com/questions/1300994/… 实现这看起来真的很痛苦。如果为 JavaScript 验证的祖父实现这么痛苦,不知道 BootstrapValidator 多久会发生。
标签: javascript jquery twitter-bootstrap validation