【问题标题】:How to disable Escape Key for Twitter Bootstrap Modals?如何禁用 Twitter Bootstrap 模式的 Escape 键?
【发布时间】:2013-05-22 13:27:58
【问题描述】:

在显示的模态中有一个表格。如果我专注于输入字段(与此相关的任何字段)并按 ESC 键,则该模式将被隐藏。但是,如果我不关注表单字段,则按 ESC 键不会关闭模式。怎么回事?

我想完全禁用模式的 ESC 键功能。我试过这个:

$(document).on('keypress', function(e) {
  if(e.keyCode == 27) {
    e.preventDefault();
    return false;
  }
}

但这不会影响任何事情。有没有办法完全禁用模式的 ESC 键?

【问题讨论】:

标签: twitter-bootstrap


【解决方案1】:

通过添加data-keyboard="false" 可以解决问题。

类似这样的:<div class="modal hide fade" data-keyboard="false" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">

【讨论】:

    【解决方案2】:

    Twitter 的 Bootstrap modal.js(参见 http://getbootstrap.com/2.3.2/javascript.html#modals)本身具有键盘 true 或 false 布尔值。您可以使用以下脚本避免转义键并在模式外单击:

        $(function () {
            $('.modal').modal({
                show: true,
                keyboard: false,
                backdrop: 'static'
            });
        });
    

    工作演示:

    $(function () {
         $('.modal').modal({
          show:true,
          keyboard: false,
          backdrop: 'static'
        });
    });
     <head>
            <!-- Required meta tags -->
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
            <!-- Bootstrap CSS -->
            <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    
            <title>Hello, world!</title>
          </head>
          <body>
           
            <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
            <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
          </body>
          
          <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
          Launch demo modal
        </button>
    
          <div class="modal" id="exampleModal" tabindex="-1" role="dialog">
          <div class="modal-dialog" role="document">
            <div class="modal-content">
              <div class="modal-header">
                <h5 class="modal-title">Modal title</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-body">
                <p>Modal body text goes here.</p>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
              </div>
            </div>
          </div>
        </div>

    【讨论】:

    • 我试过了,但我仍然得到相同的行为。 Keyboard:false 由于某种原因对我不起作用。
    • 我可以举个例子吗?小提琴之类的活生生的例子就足够了。
    • 我通过在模态元素中添加data-keyboard="false" 进行了尝试,它正在工作。
    • 这里是 Bootstrap 文档的更新链接,更详细地解释了这些选项,FWIW:v4-alpha.getbootstrap.com/components/modal/#options
    • 对于任何人(使用 BS 3.3.x,但也可能使用其他版本):当模式已经显示时,似乎更改 keyboard:false 无效。此设置会在模式打开时进行评估。
    【解决方案3】:

    如果你的模态对话框看起来像这样

    <div id="myModal" class="modal hide fade" tabindex="-1" ...>
       ....
    </div>
    

    删除 tabindex="-1" 应该禁用 Escape 键。

    【讨论】:

    • 删除 tabindex 属性确实会禁用 Escape 键,但前提是模式中没有输入字段。当输入字段存在并且您专注于它时,点击转义将导致模式关闭。
    【解决方案4】:

    你需要data-keyboard="false"data-backdrop="static"

    工作演示:

    <!doctype html>
    <html lang="en">
      <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    
        <title>Hello, world!</title>
      </head>
      <body>
       
        <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
      </body>
      
      <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
      Launch demo modal
    </button>
    
    
      <div class="modal" id="exampleModal" tabindex="-1" role="dialog" data-keyboard="false" data-backdrop="static">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title">Modal title</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <div class="modal-body">
            <p>Modal body text goes here.</p>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
          </div>
        </div>
      </div>
    </div>
    
    
    </html>

    【讨论】:

    • 背景选项是票数最高的答案的一个很好的补充。
    【解决方案5】:

    将键盘值设置为 false!

    例子:

    <a data-controls-modal="myModal"
       data-backdrop="static"
       data-keyboard="false"
       href="#">
    

    或者如果您使用的是 JavaScript:

    $(function () {
    $('.modal').modal({
      backdrop: 'static',
      keyboard: false
    });
    }
    

    【讨论】:

      【解决方案6】:
      > 键盘:真 按下退出键时关闭模式。 > 键盘:假 按下退出键时防止关闭模态

      演示 JQuery 代码

      $('#myModal').modal({show: true, keyboard: false});

      【讨论】:

        【解决方案7】:

        您可以通过向其添加 ID 并简单地删除 keydown 事件来定位特定输入,如下所示:

        JS

        $(document).ready(function() {
          $('form input').keydown(function(event){
            if(event.keyCode == 13) {
              event.preventDefault();
              return false;
            }
          });
        });
        

        此示例使用 Enter 键。

        【讨论】:

        • 嗯,我试过了,但它不会阻止模态关闭。
        猜你喜欢
        • 2012-04-11
        • 2017-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 2013-10-13
        相关资源
        最近更新 更多