4

好吧,让我们先解决这个问题。是的,我想隐藏上下文菜单。不,我并不是要阻止有人从我的页面上删除内容。它的预期用途是用于浏览器内游戏的输入,并且仅限于网页上的特定区域。

从意识形态转向技术...

var mouse_input = function (evt) {
    // ...
    return false;
}

document.onmousedown = mouse_input; // successful at preventing the menu.
document.addEventListener('mousedown', mouse_input, true); // unsuccessful

有人可以向我解释为什么该addEventListener版本无法阻止上下文菜单触发吗?我在SafariWeb Inspector中看到的唯一区别是它document.onmousedownisAttribute值是 true,而addEventListenerversion 的值与 false 相同。

4

2 回答 2

4

于是,我徒劳的寻找突然变得富有成效。

var mouse_input = function (evt) {
    evt.preventDefault();
}

document.addEventListener('contextmenu', mouse_input, false);

适用于SafariFirefoxOperapreventDefault()阻止通常的动作发生。我不得不更改监听的事件以适应Safari,无论如何它更合乎逻辑。更多信息:实现EventListener的函数不应返回值,因此return false没有效果。

于 2010-08-11T20:11:58.130 回答
4

解释差异..element.onmousedown = somefunction;是绝对的任务;您正在替换元素上的事件处理程序。element.addEventListener(...)顾名思义,就是在已经为事件附加的任何处理程序之外添加一个处理程序。

于 2010-08-11T21:18:35.513 回答