【问题标题】:Bootstrap 3 modal is closed when enter is pressed, but form is not submitted按下回车键时,Bootstrap 3模式关闭,但未提交表单
【发布时间】:2014-07-25 14:53:05
【问题描述】:

我有以下 Twitter Bootstrap 3 模态,模态内部有一个表单:

<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            <h2 class="modal-title">Add new page</h2>
        </div>
        <div class="modal-body">
            <form class="form-horizontal add-new-page-form">
                <fieldset>
                    <!-- Label -->
                    <div class="form-group">
                      <label class="col-md-4 control-label" for="labelInput">Label</label>
                      <div class="col-md-5">
                      <input id="labelInput" name="labelInput" type="text" data-field="label" class="form-control input-md">
                      <span class="help-block">Page label</span>
                      </div>
                    </div>

                    <!-- Button (Double) -->
                    <div class="form-group">
                        <label class="col-md-4 control-label" for="closeBtn"></label>
                        <div class="col-md-8">
                            <button id="closeBtn" name="closeBtn" class="btn btn-default" data-dismiss="modal">Close</button>
                            <input type="submit" id="saveBtn" name="saveBtn" class="btn btn-primary add-page" value="Add">
                        </div>
                    </div>
                </fieldset>
            </form>
        </div>
     </div>
  </div>
</div>

我想通过 jQuery 捕捉 submit 事件:

$("form").on("submit", function () {
    alert("foo");
    return false;
});

表单不是通过按Enter键提交的(当文本输入被聚焦时),而是在Add按钮时提交(即submit一个) 被点击。

我找不到未通过 Enter 提交表单的原因。模态只是关闭,但submit 事件不会被发射/触发。

JSFDDLE - 问题可以在哪里重现

在 Chromium 版本 34.0.1847.116 Ubuntu 14.04 aura (260972) 和 Firefox 31.0 上测试。两种浏览器都存在同样的问题。

【问题讨论】:

    标签: jquery html forms twitter-bootstrap


    【解决方案1】:

    您可以简单地从

    更改顺序
    close-button
    
    submit-button
    

    submit-button
    
    close-button
    

    或添加

     type="button"
    

    到您的关闭按钮,因此它不会被解释为提交按钮

    干杯

    【讨论】:

    • 我改变了按钮的顺序并且它起作用了。但是为什么?!我想用浏览器自带的提交设置,所以其他脚本没用。
    • 好吧,似乎有一些 bootstrap.js 覆盖了默认行为 stackoverflow.com/questions/10400149/…
    • 我看到了那个问题,但他们没有解释这个问题。 :-)
    • 正确的答案是将 type="button" 添加到您的关闭按钮,然后您不必更改顺序
    • 将此信息添加到您的答案和 JSFIDDLE 中。那是最好的。在上一个问题中,他们为x 图标设置了type="button"。非常感谢。
    【解决方案2】:

    我在模态关闭事件中添加了一个处理程序,以便在关闭模态之前提交表单,如下所示:

    $("#myModal").on("hide.bs.modal", function () {
        $(this).find('form').submit(); 
    });
    

    我已经相应地更新了jsfiddle,http://jsfiddle.net/yAzrs/2/

    您还可以在表单本身中监听回车键,如下所示:

    $('form').on("keypress", function (e) {
        if (e.which == 13) $(this).submit();
    });
    

    【讨论】:

      【解决方案3】:

      您是否尝试过使用

      $(document).keypress(function(e) {
          if(e.which == 13) {
              alert('You pressed enter!');
          }
      });
      

      jQuery 并不知道你是否按下了 Enter 键,只需按下 Enter 键即可。包括上面的 jQuery,但在 if 语句中使用您自己的代码,希望它应该可以工作

      【讨论】:

      • 我知道,但我想赶上submit 事件。
      【解决方案4】:

      在输入字段中按回车键会触发带有 data-dismiss="modal" 的按钮 只需将 data-dismiss="modal" 更改为您的提交按钮并从您的关闭按钮中删除

      <input type="submit" id="saveBtn" name="saveBtn" class="btn btn-primary add-page" data-dismiss="modal" value="Add">
      

      【讨论】:

        猜你喜欢
        • 2013-06-22
        • 2012-01-02
        • 2011-05-10
        • 2011-07-09
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多