是否右键单击Javascript事件?如果是这样,我该如何使用它?
答案 0 :(得分:149)
正如其他人所说,可以检测到鼠标右键through the usual mouse events (mousedown, mouseup, click)。但是,如果您在启动右键单击菜单时正在寻找触发事件,那么您正在查找错误的位置。右键单击/上下文菜单也可通过键盘访问(在Windows和某些Linux上使用shift + F10或上下文菜单键)。在这种情况下,您要查找的事件是oncontextmenu
:
window.oncontextmenu = function ()
{
showCustomMenu();
return false; // cancel default menu
}
对于鼠标事件本身,浏览器将属性设置为可从事件处理函数访问的事件对象:
document.body.onclick = function (e) {
var isRightMB;
e = e || window.event;
if ("which" in e) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
isRightMB = e.which == 3;
else if ("button" in e) // IE, Opera
isRightMB = e.button == 2;
alert("Right mouse button " + (isRightMB ? "" : " was not") + "clicked!");
}
答案 1 :(得分:22)
查看以下jQuery代码:
$("#myId").mousedown(function(ev){
if(ev.which == 3)
{
alert("Right mouse button clicked on element with id myId");
}
});
which
的值为:
答案 2 :(得分:9)
您可以使用事件window.oncontextmenu
,例如:
window.oncontextmenu = function () {
alert('Right Click')
}
<h1>Please Right Click here!</h1>
答案 3 :(得分:5)
雅,虽然w3c说点击事件可以检测到右键点击,但是在通常的浏览器中没有通过右键点击触发onClick。
事实上,右键单击只触发onMouseDown onMouseUp和onContextMenu。
因此,您可以将“onContextMenu”视为右键单击事件。这是HTML5.0标准。
答案 4 :(得分:3)
不,但您可以检测“onmousedown”事件中使用了什么鼠标按钮...并从那里确定它是否是“右键单击”。
答案 5 :(得分:2)
以下代码使用jQuery根据默认的rightclick
和mousedown
事件生成自定义mouseup
事件。
它考虑以下几点:
contextmenu
事件)on('contextmenu', ...)
的解决方案
$(function ()
{ // global rightclick handler - trigger custom event "rightclick"
var mouseDownElements = [];
$(document).on('mousedown', '*', function(event)
{
if (event.which == 3)
{
mouseDownElements.push(this);
}
});
$(document).on('mouseup', '*', function(event)
{
if (event.which == 3 && mouseDownElements.indexOf(this) >= 0)
{
$(this).trigger('rightclick');
}
});
$(document).on('mouseup', function()
{
mouseDownElements.length = 0;
});
// disable contextmenu
$(document).on('contextmenu', function(event)
{
event.preventDefault();
});
});
// Usage:
$('#testButton').on('rightclick', function(event)
{
alert('this was a rightclick');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="testButton">Rightclick me</button>
&#13;
答案 6 :(得分:2)
尝试使用which
和/或button
属性
function onClick(e) {
if (e.which === 1 || e.button === 0) {
console.log('Left mouse button at ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 2 || e.button === 1) {
console.log('Middle mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 3 || e.button === 2) {
console.log('Right mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 4 || e.button === 3) {
console.log('Backward mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 5 || e.button === 4) {
console.log('Forward mouse button ' + e.clientX + 'x' + e.clientY);
}
}
window.addEventListener("mousedown", onClick);
一些信息here
答案 7 :(得分:1)
是的,oncontextmenu可能是最好的选择,但要注意它会在鼠标按下时触发,而click会在鼠标按下时触发。
其他相关问题是关于双重右键点击 - 除非通过手动计时器检查,否则显然不支持。如果您需要/想要支持左手鼠标输入(按钮反转),您可能希望能够双击右键的一个原因。浏览器实现似乎对我们应该如何使用可用的输入设备做了很多假设。
答案 8 :(得分:1)
是的 - 它是!
function doSomething(e) {
var rightclick;
if (!e) var e = window.event;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
alert('Rightclick: ' + rightclick); // true or false
}
答案 9 :(得分:1)
完成右键单击的最简单方法是使用
$('classx').on('contextmenu', function (event) {
});
然而这不是跨浏览器解决方案,浏览器对此事件的行为有所不同,尤其是firefox和IE。我建议下面提供跨浏览器解决方案
$('classx').on('mousedown', function (event) {
var keycode = ( event.keyCode ? event.keyCode : event.which );
if (keycode === 3) {
//your right click code goes here
}
});
答案 10 :(得分:1)
这是触发它的最简单方法,它适用于除(CefSharp Chromium等...)应用程序Web视图之外的所有浏览器。 希望我的代码能对您有所帮助!
const contentToRightClick=document.querySelector("div#contentToRightClick");
//const contentToRightClick=window; //If you want to add it into the whole document
contentToRightClick.oncontextmenu=function(e){
e=(e||window.event);
e.preventDefault();
console.log(e);
return false; //Remove it if you want to keep the default contextmenu
}
div#contentToRightClick{
background-color: #eee;
border: 1px solid rgba(0,0,0,.2);
overflow: hidden;
padding: 20px;
height: 150px;
}
<div id="contentToRightClick">Right click on the box !</div>
答案 11 :(得分:1)
window.oncontextmenu = function (e) {
e.preventDefault()
alert('Right Click')
}
<h1>Please Right Click here!</h1>
答案 12 :(得分:0)
使用jQuery
库
$(window).on("contextmenu", function(e)
{
alert("Right click");
})
答案 13 :(得分:0)
如果您想在右键单击事件时调用该函数,则表示我们可以使用以下
<html lang="en" oncontextmenu="func(); return false;">
</html>
<script>
function func(){
alert("Yes");
}
</script>
答案 14 :(得分:0)
这是和我一起工作的
if (evt.xa.which == 3)
{
alert("Right mouse clicked");
}
答案 15 :(得分:0)
如果要检测鼠标右键,则不应使用MouseEvent.which
属性,因为该属性是非标准的,并且浏览器之间存在很大的不兼容性。 (请参见MDN)而应使用MouseEvent.button
。它返回一个代表给定按钮的数字:
0
:按下主按钮,通常是向左按钮或未初始化状态1
:按下了辅助按钮,通常是滚轮按钮或中间按钮(如果有)2
:按下了辅助按钮,通常是向右按钮3
:第四个按钮,通常是“浏览器后退”按钮4
:第五个按钮,通常是“浏览器前进”按钮 MouseEvent.button
处理的输入类型不仅仅是标准鼠标:
按钮的配置可能与标准配置不同 “从左到右”的布局。配置为左手使用的鼠标可能 取消按钮操作。有些定位设备只有一个 按钮,并使用键盘或其他输入机制指示主菜单, 辅助,辅助等。其他可能有许多按钮映射到 不同的功能和按钮值。
参考:
答案 16 :(得分:0)
大多数使用 mouseup
或 contextmenu
事件的给定解决方案在每次鼠标右键上升时都会触发,但它们不会检查之前是否已按下。
如果您正在寻找真正的右键单击事件,该事件仅在鼠标按钮在同一元素内按下和释放时触发,那么您应该使用auxclick
事件。由于这会针对每个非主鼠标按钮触发,因此您还应该通过检查 button
属性来过滤其他事件。
window.addEventListener("auxclick", (event) => {
if (event.button === 2) alert("Right click");
});
您还可以通过在 JavaScript 的开头添加以下代码来创建自己的右键单击事件:
{
const rightClickEvent = new CustomEvent('rightclick', { bubbles: true });
window.addEventListener("auxclick", (event) => {
if (event.button === 2) {
event.target.dispatchEvent(rightClickEvent);
}
});
}
然后您可以通过 addEventListener
方法监听右键单击事件,如下所示:
your_element.addEventListener("rightclick", your_function);
阅读有关 MDN 的 auxclick
活动的更多信息。
答案 17 :(得分:-1)
要通过鼠标右键单击,您可以使用'oncontextmenu'事件。以下是一个例子:
document.body.oncontextmenu=function(event) {
alert(" Right click! ");
};
上面的代码会在按下右键时提醒一些文本。如果您不希望显示浏览器的默认菜单,则可以添加 返回false; 在功能的内容结束时。 感谢。
答案 18 :(得分:-2)
是的,它是一个javascript mousedown事件。还有一个jQuery plugin来做它