javascript - Bootstrap 表单验证验证同一表单组内的所有字段

标签 javascript forms twitter-bootstrap validation

我在验证表单时遇到问题。

我的 html 是:

<div class="form-group required">
    <label for="address1" class="col-xs-12 col-sm-2 col-md-2 control-label">Address</label>
    <div class="col-xs-12 col-sm-9 col-md-9">
        <input type="text" class="form-control" name="address1" id="address1">
        <label for="address1" class="control-label control-label-under">Address 1</label>
    </div> 
</div>

<div class="form-group required">
    <div class="col-xs-12 col-sm-3 col-md-3 col-sm-offset-2 col-md-offset-2">
        <input type="text" class="form-control" name="address_city" id="AddressCity">
        <label class="control-label control-label-under" for="AddressCity">City</label>
    </div>
    <p class="row clearfix  visible-xs-block"></p>
    <div class="col-xs-12 col-sm-3 col-md-3 contact-state">
        <input type="text" class="form-control" name="address_state" id="AddressEmirate">
        <label class="control-label control-label-under" for="AddressEmirate">Emirate</label>
    </div>
    <p class="row clearfix  visible-xs-block"></p>
    <div class="col-xs-12 col-sm-3 col-md-3">
        <input type="text" class="form-control" name="address_zip" id="AddressPostal">
        <label class="control-label control-label-under" for="AddressPostal"></label>
    </div>
</div>
<hr>

输出是

enter image description here

现在的问题是我需要内联显示它们,所以我将它们放在同一个 from-group 中,这在验证时产生了问题。

我没有任何邮政编码验证。但是在验证任何城市/酋长国验证是否失败时,邮政编码也显示为红色。我不想要的。

我的问题是如何如图所示内联显示它们,同时将它们保存在单独的表单组中,这样验证就不会受到影响。

最佳答案

不难,用同样的HTML结构就可以实现

原因: postal code输入在不需要且未设置验证规则的地方突出显示为红色,因为它在 <div class="form-group required"> 中其中 address_stateaddress_city都在同一个div设置了验证规则,所以如果其中任何一个无效,错误类别 .has-error .form-control触发并突出显示 postal code也可以输入。

Fiddle例如 postal code输入突出显示为红色但未设置验证规则。

解决方案:设置自定义错误selector例如 row: '.col-xs-12',内部验证规则,因此它将覆盖默认错误类 .has-error .form-control并且只针对 <div class="form-group required"> 中的输入设置了验证规则但有错误。

More Information

Plugin Example

Fiddle自定义选择器示例

$(document).ready(function () {
    $('#contactForm')
        .formValidation({
        framework: 'bootstrap',
        icon: {
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
        },
        fields: {
            address_city: {
                row: '.col-xs-12',
                validators: {
                    notEmpty: {
                        message: 'The city is required'
                    }
                }
            },
            address_state: {
                row: '.col-xs-12',
                validators: {
                    notEmpty: {
                        message: 'The State is required'
                    }
                }
            },
            address1: {
                validators: {
                    notEmpty: {
                        message: 'The Address One required'
                    }
                }
            }
        }
    });
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/formvalidation/0.6.1/css/formValidation.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/formvalidation/0.6.1/js/formValidation.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/formvalidation/0.6.1/js/framework/bootstrap.min.js"></script>
<form id="contactForm" class="form-horizontal">
    <div class="form-group required">
        <label for="address1" class="col-xs-12 col-sm-2 col-md-2 control-label">Address</label>
        <div class="col-xs-12 col-sm-9 col-md-9">
            <input type="text" class="form-control" name="address1" id="address1">
        </div>
    </div>
        
    <div class="form-group required">
        <div class="col-xs-12 col-sm-3 col-md-3 col-sm-offset-2 col-md-offset-2">
            <input type="text" class="form-control" name="address_city" id="AddressCity">
            <label class="control-label control-label-under" for="address_city">City</label>
        </div>
            
        <p class="row clearfix  visible-xs-block" form-group required></p>
            
        <div class="col-xs-12 col-sm-3 col-md-3 contact-state">
            <input type="text" class="form-control" name="address_state" id="AddressEmirate">
            <label class="control-label control-label-under" for="address_state">Emirate</label>
        </div>
            
        <p class="row clearfix  visible-xs-block " ></p>
            
        <div class="col-xs-12 col-sm-3 col-md-3">
            <input type="text" class="form-control" name="address_zip" id="AddressPostal">
            <label class="control-label control-label-under"></label>
        </div>
    </div>
    <div class="form-group">
        <div class="col-xs-9 col-xs-offset-3">
            <button type="submit" class="btn btn-primary">Submit</button>
        </div>
    </div>
</form>

旁注:您必须向左展开 fiddle View ,或者在完整页面 View 中运行上面的代码片段,它们将与所讨论的快照完全一样。

关于javascript - Bootstrap 表单验证验证同一表单组内的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32942717/

相关文章:

javascript - @storybook/angular 无法在故事索引上加载 scss 文件

javascript - 同一根上的路由器链接中的 Angular 6 冲突

javascript - 如何使表单在​​提交 url 操作时不打开新窗口?

javascript - 两个 ng-submit 事件用于在一个 html 页面中的两个表单上进行验证

javascript - 在 Javascript 中解析 ISO 8601 日期

javascript - 如何在这个倒计时脚本中添加天数,使其变成DD-HH-MM-SS?

javascript - 单击另一个字段时,Firefox 表单字段窃取焦点

html - <button> 元素的显示属性不同于 <a> 元素

html - 将 Bootstrap 与无响应的 div 内容混合?

html - 如何将 Bootstrap Glyphicon 放入 asp :Button in ASP.Net 中?