【问题标题】:Validate input text in bootstrap modal在引导模式中验证输入文本
【发布时间】:2015-03-14 03:17:29
【问题描述】:

我想在不使用任何框架的情况下以引导模式验证表单。它实际上是一个简单的模式,只有一个输入文本和两个按钮“关闭”和“发送”。 用户应在输入框中输入他/她的姓名,然后单击发送。表单是使用 post 方法发送的。

我想要做的是,如果用户没有在输入框中输入任何内容并单击“发送”按钮,则输入框应该有一个红色边框环绕它而不是默认的蓝色边框。这是我的模态代码:

<div id="myModal" class="modal fade" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <!--form-->

            <form class = "form-horizontal" id="myForm" method="post" action="test.php" role="form">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                    <h4 class="modal-title">My modal</h4>
                </div>
                <div class="modal-body">
                    <p>
                        Please enter your name:
                    </p>
                    <br/>

                    <div class="form-group">

                        <div class="col-lg-12">
                            <label class="control-label" for="firstname">Name</label>
                            <input type="text" class="form-control required" id="firstname" name="firstname">
                        </div>
                    </div>

                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <button id="myFormSubmit" class="btn btn-primary">Send</button>
                </div>
            </form>
        </div>
    </div>
</div>

我尝试使用 javascript 将输入文本的类更改为 has-error,但它不会产生红色轮廓。当我单击发送时,它通过 post 方法发送空值,而不是 这是我的 JavaScript 代码:

    <script type="text/javascript">
        $('#myForm').validate({
            rules: {
                name: {
                    minlength: 1,
                    required: true
                },
            },
            highlight: function (element) {
                $('#firstname').removeClass('has-success').addClass('has-error');
            },
            success: function (element) {
                $('#firstname').removeClass('has-error').addClass('has-success');
            }
        });
    </script>

我觉得我在这里混合了很多东西。我对 bootstrap 和 javascript 还是很陌生。我怎样才能获得所需的红色轮廓? 谢谢。

编辑: 验证函数:

function validate() {
    var x = document.forms["myForm"]["firstname"].value;
    if (x == null || x == "") {
        return false;
    }
}

【问题讨论】:

    标签: javascript jquery twitter-bootstrap twitter-bootstrap-3


    【解决方案1】:

    像这样在输入字段中使用 required

    <input type="text" class="form-control required" id="firstname" name="firstname" required/>
    

    【讨论】:

    • 这是非常危险的。 HTML5 验证可以很容易地绕过。
    • @Hanmaslah any 可以轻松绕过客户端验证,因此您几乎总是应该使用服务器端验证
    【解决方案2】:

    您需要更改input 元素div.form-groupCSS 类,而不是input 本身

    单击提交按钮后的HTML 应如下所示:

    <div class="form-group has-error">
       <div class="col-lg-12">
          <label class="control-label" for="firstname">Name</label>
          <input type="text" class="form-control required" id="firstname" name="firstname">
        </div>
    </div>
    

    要实现这一点,请将您的 JavaScript 代码更改为:

    <script type="text/javascript">
      $('#myForm').on('submit', function(e) {
        var firstName = $('#firstname');
    
        // Check if there is an entered value
        if(!firstName.val()) {
          // Add errors highlight
          firstName.closest('.form-group').removeClass('has-success').addClass('has-error');
    
          // Stop submission of the form
          e.preventDefault();
        } else {
          // Remove the errors highlight
          firstName.closest('.form-group').removeClass('has-error').addClass('has-success');
        }
      });
    </script>
    

    【讨论】:

    • 感谢您的帮助。我明白了一两件事。我尝试了您的代码,但输入从一开始就被标为红色。我想我没有很好地表达自己。我希望仅在单击发送按钮后输入的轮廓为红色。如果输入是空的并且用户点击发送按钮,那么它应该将输入框定为红色。
    • 我明白了,我放HTML 代码只是为了向您展示DOMhas-error CSS 类的位置。您只需要 JavaScript 而不是 HTML。的初始状态不应该有has-error 类。
    • 哦,好的,我明白了。即使输入文本为空,仍会提交表单。也许我应该阻止表单的默认操作,因为表单使用的是 post 方法。我该怎么办?
    • 我认为你有问题突出错误,而不是验证本身。为了帮助验证,我需要您应用于表单的 .validate() 函数的代码。
    • 难以置信!经过几分钟的调试,我发现它为什么不起作用是因为我在您编写的 javascript 代码下方有 &lt;script src="http://code.jquery.com/jquery.min.js"&gt;&lt;/script&gt;。我想应该先调用它。但我认为,当页面加载时,所有 javascript 代码都会执行,而不管您将它们放在哪里。我想我错了。至少我永远不会忘记我的错误。谢谢! :)
    【解决方案3】:

    很简单

    只需通过 javascript 函数将 class .has-error 应用于 div

    <div class="form-group has-error">
        <div class="row">
    
            <label class="col-xs-2 col-sm-2 control-label">city:</label>
    
            <div class="col-xs-3 col-sm-3 formGroups"
                id="city_form1">
                <form:input name="city" class="form-control"
                    placeholder="City" data-toggle="tooltip"
                    data-placement="bottom" title="City" maxlength="15" />
    
            </div>
        </div>
    </div>
    

    【讨论】:

      【解决方案4】:

      引导带中的 div...

      <div class="form-group">
          <div class="row">
      
              <label class="col-xs-2 col-sm-2 control-label">city:</label>
      
              <div class="col-xs-3 col-sm-3 formGroups"
                  id="city_form1">
                  <form:input name="city" class="form-control"
                      placeholder="City" data-toggle="tooltip"
                      data-placement="bottom" title="City" maxlength="15" />
      
                  <small class="help-block col-sm-offset-0 col-sm-9"
                      style="display: none;">city must require</small>
              </div>
          </div>
      </div>
      

      如您所见, .help-block is display: none 现在您编写 javascript 函数并检查验证,如果验证通过,则使其显示:block ...您可以这样做

      享受靴带:)

      【讨论】:

      • 感谢您的帮助。我想用红色勾勒出输入文本,而不是显示需要某个输入的消息。虽然我同意这是验证表单的一种方式
      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2015-10-02
      相关资源
      最近更新 更多