繁体   English   中英

防止默认事件操作不起作用......?

[英]Prevent default event action not working…?

我正在尝试在我的网站上添加键盘快捷键,以便使用键盘实现快速导航。 但是,我尝试使用Alt + X快捷方式遇到了一个小问题。 该事件运行得很好并且应该返回false ,但浏览器的File菜单无论如何都会出现。 我也尝试过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时阻止显示菜单。

使用stopPropagation(e); 而不是preventDefault方法

function stopPropagation(e)
{
    e = e || event;/* get IE event ( not passed ) */
    e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
}

参考链接

另一个SO问题,提到preventDefault在IE中有问题。

UPDATE

根据MSDN参考,尝试使用以下代码

event.returnValue=false;

还有一点来自于检测击键

一些一般性的警告:

  • 通常,Mac不如Windows可靠,并且无法检测到某些密钥。
  • 资源管理器不会为delete,end,enter,escape,功能键,home,insert,pageUp / Down和tab激活按键事件。
  • Onkeypress,Safari为删除,结束,功能键,home和pageUp.Down提供63200范围内的奇怪keyCode值。 onkeydown和-up值是正常的。
  • 除了Opera之外,在Mac上无法检测到Alt,Cmd,Ctrl和Shift。 但是,您始终可以使用altKey,ctrlKey和shiftKey属性。

我实际上有一个网络应用程序与CTRL快捷键工作正常,但后来决定我是聪明的并使用accesskey属性,并遇到IE的这个问题。

转到CTRL快捷键的问题在于许多应用程序中的许多应用程序更加标准/有用(例如:剪切,复制,粘贴,全选)。

Ctrl + Alt相当安全,但需要用户更多的工作。

我倾向于只是试图坚持ALT快捷方式IE并不是固执地坚持处理。

CTRL + A / CTRL + F演示成功取消: http//jsfiddle.net/egJyT/

这个答案似乎意味着,如果不将IE放入kiosk模式,就无法禁用菜单快捷方式。

请注意,如果您设法成功阻止浏览器检测到组合键,则可能会使某些用户无法使用该页面。 许多屏幕阅读器几乎保留了您可以想到的任何键来控制屏幕阅读器,如果您在添加快捷键代码之前使用屏幕阅读器访问您的页面,则在添加快捷键代码后,可能是完全无法访问的用户需要屏幕阅读器。

阅读本文关于访问密钥 (有点旧但可能仍然相关),以及关于预留键击组合的文章,然后再花费太多时间来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM