有没有办法在warning
字段上使用Bootstrap的表单字段验证状态/类(error
,info
,success
,form-inline
)(< em>没有使用control-group
)?
我正在使用Bootstrap,我有一个使用form-horizontal
类进行布局的大型表单。但是,表单中的某些区域需要内联字段(例如,City / State / Zip)。我正在使用form-inline
,这很好用。这是基本的标记:
<form id="account-form" class="form-horizontal" method="post" action="" novalidate>
<!-- Address -->
<div class="control-group">
<label class="control-label">Address</label>
<div class="controls">
<input type="text" name="address" />
</div>
</div>
<!-- City, State, Zip -->
<div class="control-group">
<label class="control-label">City</label>
<div class="controls form-inline">
<input type="text" name="city" />
<label>State</label>
<input type="text" name="state" />
<label>Zip Code</label>
<input type="text" name="zipcode" />
</div>
</div>
</form>
在我的特殊情况下,我需要手动处理验证。不幸的是,似乎Bootstrap的验证状态类必须应用于control-group
;正如您在上面的示例中所看到的,我的案例中的control-group
包含多个字段。我尝试在control-group
跨度或div中包裹单个字段,但control-group
与form-inline
和form-horizontal
一起使用时,其效果不佳!
是否有CSS类或其他规则我可以直接附加到字段(或其他无辜的字段包装器)以将这些样式应用于单个字段,而无需完全重新声明所有标准引导样式?
答案 0 :(得分:1)
您可以创建一些自定义较少的代码并重新编译引导程序:
将@import "_custom.less";
添加到less / bootstrap.less
创建 less / _custom.less :
// Mixin for inline form field states
.inlineformFieldState(@warning: success,@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
// Set the text color
label.@{warning},
.help-block .@{warning},
.help-inline .@{warning}{
color: @textColor;
}
// Style inputs accordingly
.checkbox .@{warning},
.radio .@{warning},
input.@{warning},
select.@{warning},
textarea.@{warning} {
color: @textColor;
}
input.@{warning},
select.@{warning},
textarea.@{warning} {
border-color: @borderColor;
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
&:focus {
border-color: darken(@borderColor, 10%);
@shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%);
.box-shadow(@shadow);
}
}
// Give a small background color for input-prepend/-append
.input-prepend .add-on .@{warning},
.input-append .add-on .@{warning} {
color: @textColor;
background-color: @backgroundColor;
border-color: @textColor;
}
}
.form-inline{
.inlineformFieldState(success, @successText, @successText, @successBackground);
.inlineformFieldState(warning, @warningText, @warningText, @warningBackground);
.inlineformFieldState(info, @infoText, @infoText, @infoBackground);
.inlineformFieldState(error, @errorText, @errorText, @errorBackground);
}
此mixin基于.formFieldState
in less / mixins.less。重新编译引导程序后,您可以使用(另请参阅:http://jsfiddle.net/bassjobsen/K3RE3/):
<form>
<div class="container">
<div class="control-group">
<div class="controls form-inline">
<label class="error">City</label>
<input class="error" type="text" name="city" />
<label class="warning">State</label>
<input class="warning" type="text" name="state" />
<label class="success">Zip Code</label>
<input class="success" type="text" name="zipcode" />
<label class="info">Street</label>
<input class="info" type="text" name="street" />
</div>
</div>
</div>
</form>
答案 1 :(得分:0)
我这样做,从div容器中删除control-group并使用form-group,但是将它放在每个输入div中,我不保证与control-group一起使用。 这个网址可以帮助你http://formvalidation.io/examples/complex-form/,这对我不起作用^ _ ^ !.我希望能帮到你。
<div class="row">
<div class="col-lg-12">
<div class="col-lg-4 form-group" >
<select class="form-control" name="pais">
<option value="" selected disabled>Pais</option>
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</select>
</div>
<div class="col-lg-4 form-group" >
<select class="form-control" name="estado">
<option value="" selected disabled>Estado</option>
<option value="a">A</option>
<option value="b">B</option>
<option value="">C</option>
</select>
</div>
<div class="col-lg-4 form-group">
<select class="form-control" name="ciudad">
<option value="" selected disabled>Ciudad</option>
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</select>
</div>
</div>
</div>
答案 2 :(得分:0)
类似的东西会起作用。
<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
//******** added custom code.
$('input[type="radio"]').closest('.col-sm-9').find('.invalid-feedback').hide();
$('input[type="radio"]:invalid').closest('.col-sm-9').find('.invalid-feedback').show();
}, false);
//******** added custom code.
});
}, false);
})();
</script>
上面的代码几乎是文档的内容,在提交事件侦听器的末尾添加了自定义代码。
@read https://getbootstrap.com/docs/4.0/components/forms/#validation