如何在 JavaScript 中捕获右键单击事件?

IT技术 javascript html events event-handling dom-events
2021-01-17 12:08:09

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

这是怎么做的?

2个回答

使用oncontextmenu事件。

下面是一个例子:

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

并使用事件侦听器(信贷风铃草2011年评论):

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

不要忘记返回false,否则仍然会弹出标准上下文菜单。

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

@InsOp 不,如果你想用返回值来阻止,它必须是false明确的,跳过返回或返回 null 不会阻止任何事情
2021-03-16 12:08:09
很棒的代码 +1,我还找到了一种更精简的方法。'oncontextmenu="chatMenu(event)" 然后在 chatMenu 中传递它时只使用 e.preventDefault(e) :D 这样,;return false; 不需要为每个新元素传递(比如聊天记录或诸如此类)
2021-03-21 12:08:09
这只会处理右键单击。如果您希望所有类型的点击都有一个事件处理程序,请将上面的代码与以下代码结合使用: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将通过鼠标右键单击来实现。
2021-03-31 12:08:09
丢失的返回值不会也不会被评估false吗?
2021-03-31 12:08:09

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

   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 )

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

我想你的意思是if ((e.which && e.which == 3) || (e.button && e.button == 2))
2021-03-20 12:08:09
或者只是 (e.which === 3 || e.button === 2)
2021-04-07 12:08:09
那是老派,但它几乎适用于所有地方。
2021-04-07 12:08:09