如何在 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() (如果你想在整个页面上全局使用它,你可以这样做<body onmousedown=rightclick(); >
【讨论】:
我想你的意思是if ((e.which && e.which == 3) || (e.button && e.button == 2))
。
或者只是 (e.which === 3 || e.button === 2)
那是老派,但它几乎无处不在。以上是关于如何在 JavaScript 中捕获右键单击事件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 在 iframe 中捕获鼠标右键单击事件
如何在powershell中使用winforms右键单击选项卡时捕获事件