【问题标题】:How can I capture the right-click event in JavaScript? [duplicate]如何在 JavaScript 中捕获右键单击事件? [复制]
【发布时间】:2011-05-13 05:38:00
【问题描述】:

我想阻止标准上下文菜单,并手动处理右键单击事件。

这是怎么做到的?

【问题讨论】:

  • @systempuntoout 不,这是一个不同的问题。另一个问题想要“在不使用 javascript 的情况下阻止右键单击”,这个问题只是想用功能扩展它(很多网站在没有成功惹恼用户的情况下这样做,例如谷歌文档)
  • @Bobobobo:没错。我的目标是 UI 扩展,而不是限制。
  • ctrl+click 或 cmd+click 也适用于此。尽管它与右键单击紧密耦合,但这似乎并不完全重复,因为它处理上下文菜单而不是右键单击。右键单击包含在上下文菜单中,而不是相反。

标签: javascript html events event-handling dom-events


【解决方案1】:

使用oncontextmenu 事件。

这是一个例子:

<div oncontextmenu="javascript:alert('success!');return false;">
    Lorem Ipsum
</div>

并使用事件侦听器(来自a comment in 2011rampion):

el.addEventListener('contextmenu', function(ev) {
    ev.preventDefault();
    alert('success!');
    return false;
}, false);

别忘了返回false,否则还是会弹出标准的上下文菜单。

如果您要使用自己编写的函数而不是 javascript:alert("Success!"),请记住在函数和 oncontextmenu 属性中都返回 false。

【讨论】:

  • 很棒的代码+1,我还发现了一种更苗条的方法。 'oncontextmenu="chatMenu(event)" 然后在 chatMenu 中传递时使用 e.preventDefault(e) :D 这样,;return false;不需要为每个新元素传递(例如聊天日志或其他)
  • 这只会处理右键单击。如果您想要一个事件处理程序来处理所有类型的单击,请结合使用上面的代码和以下代码:var onMousedown = function (e) { if (e.which === 1) {/*Left Mouse*/} else if (e.which === 3) {/*Right Mouse*/} /*etc.*/ }; clickArea.addEventListener("mousedown", onMousedown); 上下文菜单侦听器将允许右键单击事件通过。请记住,在 Mac FF 上,ctrl+rightclick 将作为鼠标左键单击,但在 Mac Chrome 上,ctrl+rightclick 将作为鼠标右键单击。跨度>
  • 缺少的返回值不会被评估为false吗?
  • @InsOp 不,如果你想用返回值阻止,它必须是false 明确的,跳过返回或返回 null 不会阻止任何事情
【解决方案2】:

我认为您正在寻找这样的东西:

   function rightclick() {
    var rightclick;
    var e = window.event;
    if (e.which) rightclick = (e.which == 3);
    else if (e.button) rightclick = (e.button == 2);
    alert(rightclick); // true or false, you can trap right click here by if comparison
}

(http://www.quirksmode.org/js/events_properties.html)

然后使用 onmousedown 即使使用函数 rightclick() (如果你想在整个页面上全局使用它,你可以这样做&lt;body onmousedown=rightclick(); &gt;

【讨论】:

  • 我想你的意思是if ((e.which &amp;&amp; e.which == 3) || (e.button &amp;&amp; e.button == 2))
  • 或者只是 (e.which === 3 || e.button === 2)
  • 那是老派,但它几乎无处不在。
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 2012-06-28
  • 2011-01-25
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
相关资源
最近更新 更多