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

Posted

技术标签:

【中文标题】Bootstrap 表单验证验证同一表单组内的所有字段【英文标题】:Bootstrap form validation validates all the fields inside same form group 【发布时间】:2016-01-01 18:17:45 【问题描述】:

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

我的 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>

输出是

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

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

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

【问题讨论】:

bootstrap 现在可以验证还是您正在使用外部插件来验证? 我正在使用引导表单验证插件。像这样-formvalidation.io/examples/contact-form。它验证了我的表单,但问题是它考虑了同一表单组中的所有字段。在我的情况下,我不想验证邮政编码,也没有为它编写任何验证逻辑。仍然当我单击保存按钮时,邮政编码也显示为红色。如何解决。 但在您在此处链接的页面的示例中,插件是通过 jquery 代码初始化的。您可以粘贴您在问题中制作的代码吗?显然你应该从“字段:”对象中删除邮政编码字段。 我只是说我没有为字段中的邮政编码编写任何验证逻辑:。发生这种情况是因为我的邮政编码字段位于城市/州/邮编的通用表单组内,并且引导程序验证了该组。你能帮我写下html吗?我需要在将城市/州/邮政编码保留在单独的表单组中的同时实现图像结果。我相信这会解决问题。 您需要发布代码的工作示例(这包括您编写/正在使用的验证)。 ***.com/help/mcve 【参考方案1】:

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

原因: postal code 输入在不需要且未设置验证规则的地方突出显示为红色,因为它在 &lt;div class="form-group required"&gt; 内,其中 address_stateaddress_city 在同一 div 内进行验证规则设置,因此如果其中任何一个无效,则会触发错误类 .has-error .form-control 并突出显示 postal code 输入。

Fiddle 示例,其中postal code 输入以红色突出显示,但未设置验证规则。

解决方案: 在验证规则中设置自定义错误selector 例如row: '.col-xs-12',,这样它将覆盖默认错误类.has-error .form-control,并且只针对具有验证规则集的&lt;div class="form-group required"&gt; 中的输入并且有错误。

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>

旁注:您必须将小提琴视图向左展开,或者在全页面视图中运行上面的 sn-p,它们将与所讨论的快照完全相同。

【讨论】:

嘿,谢谢。你帮我指出了我的错误。相同的表单组不是问题。问题是我忘记在验证代码中添加 - row: '.col-xs-12' 。现在解决了。 :-) 现在,我可以解释答案了,不客气:) 我了解您的解决方案。实际上我做了同样的事情,但你的解决方案有效,但不是我的。所以我请你解释一下这个修复。后来从萤火虫中,我指出在提交表单之前添加了 has-feedback 类,然后我将我的验证代码与您的验证代码进行了比较,最后注意到了我的错误。 :-D。

以上是关于Bootstrap 表单验证验证同一表单组内的所有字段的主要内容,如果未能解决你的问题,请参考以下文章

bootstrapValidator 获得表单验证的返回值

带有 JSON 的模式内的 Bootstrap 4 验证

bootstrap 表单验证怎么用

Bootstrap表单验证之后滚动到第一个验证失败的位置

Bootstrap+PHP表单验证实例

使用 Bootstrap (jQuery) 进行表单验证