如何在 JavaScript 中捕获右键单击事件? [复制]

Posted

技术标签:

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

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

这是怎么做到的?

【问题讨论】:

@systempuntoout 不,这是一个不同的问题。另一个问题想要“在不使用 javascript 的情况下阻止右键单击”,这个问题只是想用功能扩展它(很多网站在没有成功惹恼用户的情况下这样做,例如谷歌文档) 我建议使用 jquery.com/">JQuery</a>, beckelman.net/post/2008/11/04/… an example @Bobobobo:没错。我的目标是 UI 扩展,而不是限制。 ctrl+click 或 cmd+click 也适用于此。尽管它与右键单击紧密耦合,但这似乎并不完全重复,因为它处理上下文菜单而不是右键单击。右键单击包含在上下文菜单中,而不是相反。 【参考方案1】:

使用oncontextmenu 事件。

这是一个例子:

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

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

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) 那是老派,但它几乎无处不在。

以上是关于如何在 JavaScript 中捕获右键单击事件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 在 iframe 中捕获鼠标右键单击事件

如何在powershell中使用winforms右键单击选项卡时捕获事件

如何在 PyQt5 中捕获 QTableWidget 上的左右鼠标单击事件?

右键单击是 Javascript 事件吗?

在打开的cv c ++中单击鼠标右键时如何从视频中捕获图像

在jQuery或Javascript中切换事件捕获?