在 Esc 上,切换 bootstrap 对话框

On Esc, toggle bootstrap dialog

通常,在 Esc 上,任何对话框都会消失。但是我们希望该功能在 Esc 上启动 bootstrap 对话框并在下一个 Esc 上关闭它。 所以这是我的代码:

1.$(document).on("keyup", function(e){
2.  if(e.which == 27 && id == "#esc"){
3.      if(!$(dialogid).is(":visible")){
4.          $(dialogid).modal({'show':true, 'keyboard':false});         
5.        }else{
6.          $(dialogid).modal('hide');
7.      }
8.  }
9.});

在我慢慢按下 Esc 键之前它工作正常。但有时如果用户多次快速按 Esc 键,则对话框会永久消失。控件到达第 4 行。即

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

但是此行不会启动弹出窗口。

只需删除 {'show':true, 'keyboard':false}

并且只保留

$(dialogid).modal('show')

例如:

$(document).on("keyup", function(e){
   if(e.which == 27){
      if(!$('#myModal').is(":visible")){
          $('#myModal').modal('show');         
        }else{
          $('#myModal').modal('hide');
      }
  }
});

DEMO


更新

在不同线程中使用setTimeout到运行

DEMO

$(document).on("keyup", function(e){
   if(e.which == 27){
      if(!$('#myModal').is(":visible")){
          setTimeout(function(){
            $('#myModal').modal('show');         
          },100);
        }else{
            setTimeout(function(){
                $('#myModal').modal('hide');
            },100);
      }
  }
});