我有一个 Web 应用程序,我在其中连接了鼠标弹起和鼠标按下事件;我使用它们来选择和操作我的应用程序作为编辑器的图形语言。为了防止显示 Firefox 提供的右键单击/上下文菜单,我放置了:
if (evt.preventDefault) {
evt.preventDefault();
}
在我的每个鼠标弹起和鼠标按下事件处理程序的顶部。我不想返回 false;我实际上希望事件传播。
在 Mac 上,右键单击菜单不显示;这就是我所期望的。然而,在 Windows 上,它顽固地出现,即使 Firebug 确认我正在调用“preventDefault”并且同样“defaultPrevented”设置为 true。
知道是什么原因吗?还有其他人遇到过这个问题吗?我在 Mac 和 Windows 上都运行 Firefox 6.0.2。
[更新:较新版本的 Firefox 在 Mac 和 Windows 上产生了一致的结果:上下文菜单无法在两个平台上被抑制。]
最佳答案
好的。搁置再回头数次,终于找到了解决办法。
尝试处理各种鼠标监听器中上下文菜单的外观似乎存在根本性缺陷。相反,多亏了我找到的代码 here ,我被放在上下文菜单事件的气味上。该事件似乎是处理事情的正确方法,尽管该网站上实际发布的代码并没有起到作用——仅仅调用“stopPropagation”并返回 false 是不够的。
以下对我有用:
element.addEventListener('contextmenu', function(evt) {
evt.preventDefault();
}, false);
这已经在 Mac 上的 Firefox 10.0 和 Windows 7 上的 Firefox 9.0.1 和 10.0 上进行了测试。
关于javascript - preventDefault 会阻止 Mac 上 Firefox 中的右键单击菜单,但不会阻止 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477184/