我正在尝试在我的网站上添加键盘快捷键,以便使用键盘实现快速导航。但是,我尝试使用Alt + X快捷方式遇到了一个小问题。事件运行得很好,并按原样返回false
,但浏览器的“文件”菜单无论如何都会出现。我也尝试了preventDefault
方法,但没有改变。
该脚本的简化版本是:
document.documentElement.onkeydown = function(e) {
e = e || window.event;
switch( e.keyCode || e.which) {
// some cases here - most notably:
case 116: // F5 key
if( activeFrame) {
activeFrame.contentWindow.location.reload();
// reloads an iframe if one is active
return false;
}
break;
// more cases...
case 88: // X key
if( e.altKey) {
// do something
return false;
}
}
}
如上所述,覆盖F5键的默认操作可以正常工作 - 只有在没有iframe处于活动状态时,浏览器才会重新加载页面。我不太清楚如何在按下Alt + X时阻止显示菜单。
答案 0 :(得分:4)
使用stopPropagation(e);
代替preventDefault
方法
function stopPropagation(e)
{
e = e || event;/* get IE event ( not passed ) */
e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
}
<强> Reference link 强>
提到preventDefault在IE中存在问题的另一个问题。
event.returnValue=false;
的一些观点
一些一般性警告:
答案 1 :(得分:3)
我实际上有一个使用CTRL快捷键的网络应用程序工作得很好,但后来决定我很聪明并使用accesskey
属性,并在IE中遇到了这个问题。
转到CTRL快捷键的问题是,许多应用程序中的许多应用程序更加标准/有用(例如:剪切,复制,粘贴,全选)。
Ctrl + Alt相当安全,但需要用户更多的工作。
我倾向于坚持ALT快捷方式IE并不是固执地坚持处理。
CTRL + A / CTRL + F的演示被成功取消: http://jsfiddle.net/egJyT/
This回答似乎暗示如果不将IE置于Kiosk模式,就无法禁用菜单快捷方式。
答案 2 :(得分:1)
请注意,如果您设法成功阻止浏览器检测到组合键,则可能会使某些用户无法使用该页面。许多屏幕阅读器几乎保留了您可以想到的任何键来控制屏幕阅读器,如果您在添加快捷键代码之前使用屏幕阅读器访问您的页面,则在添加快捷键代码后,可能是完全无法访问的用户需要屏幕阅读器
在您花费太多时间处理此问题之前,请先阅读this article about access keys(有点旧但可能仍然相关)和this article about Reserved Keystroke Combinations。