javascript - preventDefault 会阻止 Mac 上 Firefox 中的右键单击菜单,但不会阻止 Windows

标签 javascript firefox dom-events

我有一个 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/

相关文章:

javascript - 如何使用文本 <input> 框更改 window.location url

javascript - 如何在 jQuery 中使用 "this"?

javascript - 在表格顶部添加一个新行

Firefox WebSockets

css - Firefox 对我的导航到底做了什么?

javascript - 检测 Tab 重复事件

javascript - Javascript Timeout 对象到底是什么?

javascript - 下载文件( Electron )

apache-flex - 客户端技术选择——有没有像 Flash/Flex 一样强大的 HTML5/Canvas 库?

CSS:Firefox 中消失的边距