使用jQuery Validation插件,我为Bootstrap定义了以下内容form
:
$(".form-with-validation").validate({
errorClass: "help-block",
errorElement: "span",
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
}
});
它适用于简单的形式。但是,当和包含需要验证的多个输入(内联)时,带有highlight
和的部分unhighlight
不起作用.form-group
:
<div class="form-group">
<label class="col-md-4 control-label">State & Zip</label>
<div class="col-md-3">
<select class="form-control required" name="state">
...
</select>
</div>
<div class="col-md-3">
<input type="text" class="form-control required" name="zip">
</div>
</div>
问题是,例如,一旦选择了一个状态,即使同级输入(即zip)仍然无效(即在其下方有一个跨度),输入也将变为有效,并且.form-group
其父级将丢失.has-error
类:.help-block
因此,我将unhighlight
零件更改为以下内容:
unhighlight: function(element) {
var formGroup = $(element).closest('.form-group');
var formGroupIsValid = true;
formGroup.find('input').each(function(){
if (! $(this).valid())
formGroupIsValid = false;
});
if (formGroupIsValid)
formGroup.removeClass('has-error');
}
但是我得到以下错误:
Uncaught RangeError: Maximum call stack size exceeded
有什么想法吗?我尝试了许多方法,但是每次遇到相同的错误时,都会遇到这种情况。
我宁愿坚持使用div.form-group
有.has-error
可能的话(因为造型)类。
Jsfiddle演示了这个问题。
这是我最终得到的解决方案。这比我想的要简单。正如人们之前所指出的,任何一次form-group
只能包含一个form-control
。因此,最简单的解决方案是将第二个form-group
放入第一个,然后将第二个form-control
放入其中:
<div class="form-group">
<label class="col-md-4 control-label">State & Zip</label>
<div class="col-md-6">
<div class="row">
<div class="col-sm-6">
<select class="form-control required" name="state">
...
</select>
</div>
<div class="col-sm-6 form-group" style="margin-bottom:0;padding-right:0">
<input type="text" class="form-control required" name="zip">
</div>
</div>
</div>
</div>
仅使用几种CSS样式,它就可以完美地工作并且看起来还不错。这是一个jsfiddle。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句