JQuery 同一表单组的验证和 Bootstrap 3 - 每个字段的错误和成功 类
JQuery Validation and Bootstrap 3 for same form-group - error and success classes for each field
我有一个 Bootstrap 3 表格,其中并排有 2 个字段(例如,名字和姓氏),为了使用 BS3 实现这一点,我将两个字段都放在相同的表单组 div,效果很好。
但是,对于我正在使用的 jQuery 验证脚本 (v1.13.1),它会根据表单组向字段添加 has-error 和 has-success 样式,因此如果字段有错误(例如,名字),然后两个字段都显示有错误样式(名字和姓氏),当它只是应该具有 class.[ 的字段之一时。 =18=]
我找到了一个似乎是在正确轨道上的解决方案,但它仍然没有解决问题:JQuery Validation and Bootstrap 3 for same form-group这段代码不起作用,但你可以看到它在正确的路径上我正在尝试做的...基本上,为同一表单组中的 2 个不同字段分离出错误和成功样式(突出显示与取消突出显示)。
这是我的简化形式 HTML:
<form class="form-horizontal" name="paymentInformation" id="paymentInformation" action="verifyOrder.cfm" method="post" role="form">
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">First Name</label>
<div class="col-sm-4">
<input id="firstname" name="firstname" placeholder="First Name" class="form-control input-md" type="text" autofocus>
</div>
<label for="lastname" class="col-sm-2 control-label">Last Name</label>
<div class="col-sm-4">
<input id="lastname" name="lastname" placeholder="Last Name" class="form-control input-md" type="text">
</div>
</div>
<input type="submit" value="PROCEED TO THE NEXT STEP " class="blueButton">
</form>
而且,这里是简化的 JS(改编自此处 Bootstrap 3 with jQuery Validation Plugin 的评论):
<script>
$.validator.setDefaults({
errorElement: "span",
errorClass: "help-block",
highlight: function(element) {
$(element).closest('.form-group').removeClass('has-success').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error').addClass('has-success');
},
errorPlacement: function (error, element) {
if (element.parent('.input-group').length || element.prop('type') === 'checkbox' || element.prop('type') === 'radio') {
error.insertAfter(element.parent());
} else {
error.insertAfter(element);
}
}
});
$("#paymentInformation").validate({
rules: {
'firstname': {
required: true,
maxlength: 200
},
'lastname': {
required: true,
maxlength: 200
}
},
messages: {
'firstname': {
required: "Enter your First Name.",
maxlength: "Your First Name cannot exceed 200 characters"
},
'lastname': {
required: "Enter your Last Name.",
maxlength: "Your Last Name cannot exceed 200 characters"
}
}
});
</script>
错误可以发现,如果 First Name OR the Last Name 字段通过验证或未通过验证,则其他字段显示它通过验证或未通过验证(如绿色和红色的 all-or-neither对于两个字段)。
这里有一个 Fiddle 显示了这个问题:http://jsfiddle.net/gamehendgeVA/m2o6c2vj/
非常感谢任何帮助!
谢谢!
您的两个输入都放置在单独的 <div class="col-sm-4">
元素中。所以你可以只替换这些行:
$(element).closest('.form-group').removeClass('has-success').addClass('has-error');
// ...
$(element).closest('.form-group').removeClass('has-error').addClass('has-success');
这些:
$(element).parent().removeClass('has-success').addClass('has-error');
// ...
$(element).parent().removeClass('has-error').addClass('has-success');
.. 或这些(同上但 class 相关):
$(element).closest('.col-sm-4').removeClass('has-success').addClass('has-error');
// ...
$(element).closest('.col-sm-4').removeClass('has-error').addClass('has-success');
或者,如果由于某种原因不能影响输入父元素的 classes,或者不能基于父元素(f.ex。您的项目正在开发中,或者得到频繁更新),您可以确保 error/success class 正确应用于使用 .wrap()
的字段。您的字段被包装到具有适当 (error/success) class:
的动态创建的 <span>
元素中
highlight: function(element) {
$(element).parent().is('.has-success, .has-error') ?
$(element).parent().removeClass('has-success').addClass('has-error') :
$(element).wrap('<span class="has-error"></span>');
},
unhighlight: function(element) {
$(element).parent().is('.has-success, .has-error') ?
$(element).parent().removeClass('has-error').addClass('has-success') :
$(element).wrap('<span class="has-success"></span>');
}
我有一个 Bootstrap 3 表格,其中并排有 2 个字段(例如,名字和姓氏),为了使用 BS3 实现这一点,我将两个字段都放在相同的表单组 div,效果很好。
但是,对于我正在使用的 jQuery 验证脚本 (v1.13.1),它会根据表单组向字段添加 has-error 和 has-success 样式,因此如果字段有错误(例如,名字),然后两个字段都显示有错误样式(名字和姓氏),当它只是应该具有 class.[ 的字段之一时。 =18=]
我找到了一个似乎是在正确轨道上的解决方案,但它仍然没有解决问题:JQuery Validation and Bootstrap 3 for same form-group这段代码不起作用,但你可以看到它在正确的路径上我正在尝试做的...基本上,为同一表单组中的 2 个不同字段分离出错误和成功样式(突出显示与取消突出显示)。
这是我的简化形式 HTML:
<form class="form-horizontal" name="paymentInformation" id="paymentInformation" action="verifyOrder.cfm" method="post" role="form">
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">First Name</label>
<div class="col-sm-4">
<input id="firstname" name="firstname" placeholder="First Name" class="form-control input-md" type="text" autofocus>
</div>
<label for="lastname" class="col-sm-2 control-label">Last Name</label>
<div class="col-sm-4">
<input id="lastname" name="lastname" placeholder="Last Name" class="form-control input-md" type="text">
</div>
</div>
<input type="submit" value="PROCEED TO THE NEXT STEP " class="blueButton">
</form>
而且,这里是简化的 JS(改编自此处 Bootstrap 3 with jQuery Validation Plugin 的评论):
<script>
$.validator.setDefaults({
errorElement: "span",
errorClass: "help-block",
highlight: function(element) {
$(element).closest('.form-group').removeClass('has-success').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error').addClass('has-success');
},
errorPlacement: function (error, element) {
if (element.parent('.input-group').length || element.prop('type') === 'checkbox' || element.prop('type') === 'radio') {
error.insertAfter(element.parent());
} else {
error.insertAfter(element);
}
}
});
$("#paymentInformation").validate({
rules: {
'firstname': {
required: true,
maxlength: 200
},
'lastname': {
required: true,
maxlength: 200
}
},
messages: {
'firstname': {
required: "Enter your First Name.",
maxlength: "Your First Name cannot exceed 200 characters"
},
'lastname': {
required: "Enter your Last Name.",
maxlength: "Your Last Name cannot exceed 200 characters"
}
}
});
</script>
错误可以发现,如果 First Name OR the Last Name 字段通过验证或未通过验证,则其他字段显示它通过验证或未通过验证(如绿色和红色的 all-or-neither对于两个字段)。
这里有一个 Fiddle 显示了这个问题:http://jsfiddle.net/gamehendgeVA/m2o6c2vj/
非常感谢任何帮助!
谢谢!
您的两个输入都放置在单独的 <div class="col-sm-4">
元素中。所以你可以只替换这些行:
$(element).closest('.form-group').removeClass('has-success').addClass('has-error');
// ...
$(element).closest('.form-group').removeClass('has-error').addClass('has-success');
这些:
$(element).parent().removeClass('has-success').addClass('has-error');
// ...
$(element).parent().removeClass('has-error').addClass('has-success');
.. 或这些(同上但 class 相关):
$(element).closest('.col-sm-4').removeClass('has-success').addClass('has-error');
// ...
$(element).closest('.col-sm-4').removeClass('has-error').addClass('has-success');
或者,如果由于某种原因不能影响输入父元素的 classes,或者不能基于父元素(f.ex。您的项目正在开发中,或者得到频繁更新),您可以确保 error/success class 正确应用于使用 .wrap()
的字段。您的字段被包装到具有适当 (error/success) class:
<span>
元素中
highlight: function(element) {
$(element).parent().is('.has-success, .has-error') ?
$(element).parent().removeClass('has-success').addClass('has-error') :
$(element).wrap('<span class="has-error"></span>');
},
unhighlight: function(element) {
$(element).parent().is('.has-success, .has-error') ?
$(element).parent().removeClass('has-error').addClass('has-success') :
$(element).wrap('<span class="has-success"></span>');
}