是否右键单击Javascript事件?

时间:2010-03-09 00:19:02

标签: javascript

是否右键单击Javascript事件?如果是这样,我该如何使用它?

19 个答案:

答案 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!");
} 

window.oncontextmenu - MDC

答案 1 :(得分:22)

查看以下jQuery代码:

$("#myId").mousedown(function(ev){
      if(ev.which == 3)
      {
            alert("Right mouse button clicked on element with id myId");
      }
});

which的值为:

    左侧按钮
  • 1
  • 中间按钮
  • 2
  • 右侧按钮
  • 3

答案 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根据默认的rightclickmousedown事件生成自定义mouseup事件。 它考虑以下几点:

  • 触发鼠标
  • 仅在
  • 之前在同一元素上按下moused时触发
  • 此代码尤其适用于JFX Webview(因为那里没有触发contextmenu事件)
  • 按下键盘上的上下文菜单键时不触发(如on('contextmenu', ...)的解决方案

&#13;
&#13;
$(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;
&#13;
&#13;

答案 6 :(得分:2)

尝试使用which和/或button属性

demo

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处理的输入类型不仅仅是标准鼠标:

  

按钮的配置可能与标准配置不同   “从左到右”的布局。配置为左手使用的鼠标可能   取消按钮操作。有些定位设备只有一个   按钮,并使用键盘或其他输入机制指示主菜单,   辅助,辅助等。其他可能有许多按钮映射到   不同的功能和按钮值。

参考:

  1. https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which
  2. https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button

答案 16 :(得分:0)

大多数使用 mouseupcontextmenu 事件的给定解决方案在每次鼠标右键上升时都会触发,但它们不会检查之前是否已按下。


如果您正在寻找真正的右键单击事件,该事件仅在鼠标按钮在同一元素内按下和释放时触发,那么您应该使用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);

阅读有关 MDNauxclick 活动的更多信息。

答案 17 :(得分:-1)

要通过鼠标右键单击,您可以使用'oncontextmenu'事件。以下是一个例子:

 document.body.oncontextmenu=function(event) {
     alert(" Right click! ");
 };

上面的代码会在按下右键时提醒一些文本。如果您不希望显示浏览器的默认菜单,则可以添加      返回false; 在功能的内容结束时。 感谢。

答案 18 :(得分:-2)

是的,它是一个javascript mousedown事件。还有一个jQuery plugin来做它