在addEventListener或element.on附加的事件处理程序中返回false`

时间:2010-08-11 19:35:28

标签: javascript javascript-events addeventlistener preventdefault

是的,让我们先解决这个问题。是的,我想隐藏上下文菜单。不,我不是想阻止某人从我的页面上取消内容。它的用途是用于浏览器内游戏的输入,它将仅限于网页上的特定区域。

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

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

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

有人可以向我解释为什么addEventListener版本无法停止上下文菜单的触发吗?我在 Safari Web Inspector 中看到的唯一区别是document.onmousedown的{​​{1}}值为isAttribute,而addEventListener 1}}版本与false具有相同的值。

2 个答案:

答案 0 :(得分:4)

所以我的无用搜索突然变得富有成效。

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

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

适用于 Safari Firefox Opera preventDefault()阻止通常的行动发生。我不得不改变为了适应 Safari 而被监听的事件,无论如何它更合乎逻辑。更多信息:实现EventListener的函数不应返回值,因此return false无效。

答案 1 :(得分:4)

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