覆盖浏览器的键盘快捷键

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

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

所以我觉得只要在几页内覆盖浏览器快捷方式就简单多了。

抛开所有的不利因素,这可能吗? 如果是这样,你怎么做?

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

至于这是不是应该做的事情,stackoverflow的问题编辑器覆盖了很多键而不会中断太多(hover在工具栏button上)。

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

这是我解决这个问题的方法:

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

 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; } } }