覆盖浏览器的键盘快捷键

时间:2010-09-09 22:06:15

标签: javascript

我想通过拦截文档对象的keypress事件处理程序而不是accesskey属性,在我的Web应用程序中添加对键盘快捷键的支持。

问题在于每个浏览器都有自己的键盘组合,所以不可能想出一套适用于所有Web浏览器并且一致的键盘组合。(例如,如果保存的快捷方式是愚蠢的话。 Ctrl + Shift + S ,其中一个用于删除 Alt + D 。)

所以我认为在我的几页中完全覆盖浏览器快捷方式会更简单。

除了所有缺点外,是否有可能?如果是这样,你怎么做?

4 个答案:

答案 0 :(得分:35)

onkeydown = function(e){
  if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){
    e.preventDefault();
    //your saving code
  }
}

答案 1 :(得分:15)

这里有一个很好的报道:http://unixpapa.com/js/key.html

至于是否应该这样做,stackoverflow的问题编辑器会覆盖相当多的键而不会中断太多(将鼠标悬停在工具栏按钮上)。

答案 2 :(得分:10)

以下是我对此问题的解决方案:

大多数(如果不是全部)浏览器的快捷方式都将被覆盖。只有系统版本,如 Alt + Tab Windows 键不会。

document.onkeydown = overrideKeyboardEvent;
document.onkeyup = overrideKeyboardEvent;
var keyIsDown = {};

function overrideKeyboardEvent(e){
  switch(e.type){
    case "keydown":
      if(!keyIsDown[e.keyCode]){
        keyIsDown[e.keyCode] = true;
        // do key down stuff here
      }
    break;
    case "keyup":
      delete(keyIsDown[e.keyCode]);
      // do key up stuff here
    break;
  }
  disabledEventPropagation(e);
  e.preventDefault();
  return false;
}
function disabledEventPropagation(e){
  if(e){
    if(e.stopPropagation){
      e.stopPropagation();
    } else if(window.event){
      window.event.cancelBubble = true;
    }
  }
}

答案 3 :(得分:0)

这是我的解决方案:

document.onkeydown = function () {
                       if ((window.event.keyCode == 121) && (window.event.ctrlKey))) {
               window.event.returnValue = false;
               window.event.cancelBubble = true;
               window.event.keyCode = 0;
               return false;
           }
       }