48

表示されているモーダルにはフォームがあります。入力フィールド (任意のフィールド) にフォーカスして ESC キーを押すと、そのモーダルが非表示になります。ただし、フォーム フィールドにフォーカスしないと、ESC キーを押してもモーダルが閉じません。どうしたの?

モーダルの ESC キー機能を完全に無効にしたい。私はこれを試しました:

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

しかし、これは何にも影響しません。モーダルの ESC キーを完全に無効にする方法はありますか?

4

7 に答える 7

67

を追加data-keyboard="false"すると、問題が修正されます。

このようなもの:<div class="modal hide fade" data-keyboard="false" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">

于 2015-05-14T17:14:10.290 に答える
58

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>

于 2013-05-23T10:24:10.100 に答える
39

モーダル ダイアログが次のようになっている場合

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

tabindex="-1"を削除すると、エスケープ キーが無効になります。

于 2013-07-26T18:39:15.607 に答える
-5

ID を追加し、Enter の keydown イベントを次のように削除するだけで、その特定の入力をターゲットにすることができます。

JS

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

この例は Enter キーで動作します。

于 2013-05-22T14:55:55.447 に答える