我想通过拦截文档对象的 keypress 事件处理程序,而不是 accesskey 属性,为我的 Web 应用程序中的几个页面添加对键盘快捷键的支持。
问题是,每个浏览器都有自己的组合键,因此不可能拿出一套键盘组合可在所有网络浏览器的工作,但一致的。(例如,它会是愚蠢的,如果在保存快捷为Ctrl+ Shift+ S,而删除的一个是Alt+ D。)
所以我认为在我的几个页面中完全覆盖浏览器快捷方式会更简单。
撇开所有不利因素不谈,这可能吗?如果是这样,你怎么做?
我想通过拦截文档对象的 keypress 事件处理程序,而不是 accesskey 属性,为我的 Web 应用程序中的几个页面添加对键盘快捷键的支持。
问题是,每个浏览器都有自己的组合键,因此不可能拿出一套键盘组合可在所有网络浏览器的工作,但一致的。(例如,它会是愚蠢的,如果在保存快捷为Ctrl+ Shift+ S,而删除的一个是Alt+ D。)
所以我认为在我的几个页面中完全覆盖浏览器快捷方式会更简单。
撇开所有不利因素不谈,这可能吗?如果是这样,你怎么做?
onkeydown = function(e){
if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){
e.preventDefault();
//your saving code
}
}
这里有一个很好的报道:http : //unixpapa.com/js/key.html
至于这是否应该完成,stackoverflow 的问题编辑器覆盖了相当多的键而不会破坏太多(将鼠标悬停在工具栏按钮上)。
这是我对这个问题的解决方案:
大多数(如果不是全部)浏览器的快捷方式将被覆盖。只有系统的,如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;
}
}
}
这是我的解决方案:
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;
}
}