在文档上有ESC keydown事件,如何在打开模态时阻止窗口关闭?

时间:2017-08-16 06:28:02

标签: javascript jquery

我已经使用keydown事件来关闭窗口并使其工作正常。但是,当任何模态打开时,按下Esc键,模态和窗口都会关闭。

所以我想要的是:

  • 在Esc keydown事件如果modal打开然后它应该关闭然后再一次keydown事件它应该关闭窗口

OR ELSE

  • 在Esc keydown事件如果模态未打开则应关闭Window

直到现在我已经尝试过了..

$(document).keydown(function (e) {
    if ($('#new_party_modal, #edit_party_modal, #delete_party_modal').hasClass('in') != true) {
        switch (e.which) {

            /* Esc Key */
            case 27:
                history.back();
                break;

        }

    }
});

4 个答案:

答案 0 :(得分:0)

     $(document).keydown(function(e){
    if($('#new_party_modal, #edit_party_modal, #delete_party_modal').hasClass('in') != true){
        switch(e.which){

            /* Esc Key */
            case 27:
                if(!$('#myModal').hasClass('in')) {
                   history.back();
                }
                break;

        }

    }

});

如果您的文件中有多个模态,则循环通过模态类并检查hasClass('in') - 如果任何模态包含'in'类,则不要触发history.back();

答案 1 :(得分:0)

如果你没有这个课程"在"在你的html / js中,然后像下面一样动态添加它。

$('#new_party_modal,#edit_party_modal,delete_party_modal').addClass("in");

然后验证

if($('#new_party_modal,#edit_party_modal,delete_party_modal').hasClass('in'))

不需要检查" true"或"假"明确。

然后在显示相应的模态后删除此类。

$('#new_party_modal,#edit_party_modal,delete_party_modal').removeClass("in");

希望,上面应该有用。

答案 2 :(得分:0)

是的,我终于找到了解决问题的方法。我所做的就是:

  1. 禁用包含Esc键事件的键盘的默认模态选项

    <div class="modal" id="myModal" tabindex="-1" data-backdrop="false" data-keyboard="false" role="dialog">

  2. 这里有两个模态选项,即。 数据背景数据键盘我已转为false。将false转换为数据键盘将禁用模式隐藏的默认Esc键事件。

    1. 手动关闭模式并根据条件
    2. `

      $(document).keydown(function(e){
          if(e.which == 27){
              if($('#myModal').is(':visible')){
                  //alert("Modal opened");
                  $('#myModal').modal("hide");
              }
              else{
                  //alert("Modal not opened");
                  history.back();
              }
          }
      });
      

      此处如果模态已打开,则(&#39;:可见&#39;)将返回true,如果未打开则返回false。然后添加代码。

答案 3 :(得分:0)

history.back();应该在关闭模型后触发。按下Esc键关闭模型。

编写一个单独的函数,在模型的close事件中调用,在函数内部写“history.back();”

例如,如果它是一个bootstrap模型“hidden.bs.modal”事件可以像

一样使用
  $('#modal').on('hidden.bs.modal', function () {
       windowClose();
    });
function windowClose(){
history.back();
}