Respuestas:
Como otros han mencionado, el botón derecho del mouse se puede detectar a través de los eventos usuales del mouse (mousedown, mouseup, click) . Sin embargo, si está buscando un evento de disparo cuando aparece el menú del botón derecho, está buscando en el lugar equivocado. También se puede acceder al menú contextual / clic derecho mediante el teclado (shift + F10 o tecla de menú contextual en Windows y algunos Linux). En esta situación, el evento que está buscando es oncontextmenu:
window.oncontextmenu = function ()
{
showCustomMenu();
return false; // cancel default menu
}
En cuanto a los eventos del mouse, los navegadores establecen una propiedad para el objeto del evento que es accesible desde la función de manejo de eventos:
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!");
}
(isRightMB?"was not" : "")debería ser (isRightMB?"was" : "was not"). Derecho ? Por favor, ayuda a revisarlo.
onmousedowny onmouseup, pero no onclick. Aparentemente, en Chrome, onclicksolo se activa para el botón izquierdo del mouse. (y sí chicos, he probado esto varias veces) para detectar un derecho-clic del ratón, usted tiene que combinar ambos onmousedowny onmouseup, o el uso oncontextmenu.
Eche un vistazo al siguiente código jQuery:
$("#myId").mousedown(function(ev){
if(ev.which == 3)
{
alert("Right mouse button clicked on element with id myId");
}
});
El valor de whichserá:
.whichno es lo mismo que .button? Oo .button=> 0,1,2 ; which=> 1,2,3 . Eso está mal.
Puede usar el evento window.oncontextmenu, por ejemplo:
window.oncontextmenu = function () {
alert('Right Click')
}
<h1>Please Right Click here!</h1>
window.oncontextmenu = function () { e.preventDefault() }no funcionó
Sí, aunque w3c dice que el evento de clic puede detectar el clic derecho, onClick no se activa a través del clic derecho en los navegadores habituales.
De hecho, haga clic con el botón derecho solo en ActivarMouseDown onMouseUp y onContextMenu.
Por lo tanto, puede considerar "onContextMenu" como el evento de clic derecho. Es un estándar HTML5.0.
Si desea detectar el clic derecho del mouse, no debe usar la MouseEvent.whichpropiedad, ya que no es estándar y existe una gran incompatibilidad entre los navegadores. (ver MDN ) En su lugar, debe usar MouseEvent.button. Devuelve un número que representa un botón dado:
0: Botón principal presionado, generalmente el botón izquierdo o el estado no inicializado1: Botón auxiliar presionado, generalmente el botón de la rueda o el botón central (si está presente)2: Botón secundario presionado, generalmente el botón derecho3: Cuarto botón, generalmente el botón Atrás del navegador4: Quinto botón, generalmente el botón Reenviar del navegadorMouseEvent.button maneja más tipos de entrada que solo el mouse estándar:
Los botones pueden configurarse de manera diferente al diseño estándar de "izquierda a derecha". Un mouse configurado para uso con la mano izquierda puede tener las acciones del botón invertidas. Algunos dispositivos señaladores solo tienen un botón y usan el teclado u otros mecanismos de entrada para indicar principal, secundario, auxiliar, etc. Otros pueden tener muchos botones asignados a diferentes funciones y valores de botones.
Referencia:
No, pero puede detectar qué botón del mouse se usó en el evento "onmousedown" ... y a partir de ahí determinar si fue un "clic derecho".
onmousedown, onmouseupy onclick. Sin embargo, si está buscando anular el menú del botón derecho, estos eventos no son lo que debería usar (consulte mi respuesta a continuación).
El siguiente código usa jQuery para generar un rightclickevento personalizado basado en los eventos predeterminados mousedowny mouseup. Considera los siguientes puntos:
contextmenuevento no se activa allí)on('contextmenu', ...)hace$(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');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="testButton">Rightclick me</button>
¡Sí lo es!
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
}
elem.addEventListener("click", doSomething)
Sí, oncontextmenu es probablemente la mejor alternativa, pero tenga en cuenta que se dispara con el mouse hacia abajo, mientras que el clic se disparará con el mouse hacia arriba.
Otras preguntas relacionadas se referían al doble clic derecho, que aparentemente no es compatible, excepto mediante la verificación manual del temporizador. Una razón por la que es posible que desee tener doble clic derecho es si necesita / desea admitir la entrada del mouse para zurdos (inversión de botones). Las implementaciones del navegador parecen hacer muchas suposiciones sobre cómo deberíamos usar los dispositivos de entrada disponibles.
La forma más fácil de hacer clic derecho es usar
$('classx').on('contextmenu', function (event) {
});
Sin embargo, esta no es una solución de navegador cruzado, los navegadores se comportan de manera diferente para este evento, especialmente firefox e IE. Recomendaría a continuación para una solución de navegador cruzado
$('classx').on('mousedown', function (event) {
var keycode = ( event.keyCode ? event.keyCode : event.which );
if (keycode === 3) {
//your right click code goes here
}
});
Esa es la forma más fácil de activarlo, y funciona en todos los navegadores, excepto en las vistas web de aplicaciones como (CefSharp Chromium, etc.). ¡Espero que mi código te ayude y buena suerte!
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>
window.oncontextmenu = function (e) {
e.preventDefault()
alert('Right Click')
}
<h1>Please Right Click here!</h1>
Si desea llamar a la función mientras hace clic con el botón derecho, significa que podemos usar los siguientes
<html lang="en" oncontextmenu="func(); return false;">
</html>
<script>
function func(){
alert("Yes");
}
</script>
Intenta usar la propiedad whichy / obutton
La 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);
Alguna información aquí

Para manejar el clic derecho con el mouse, puede usar el evento 'oncontextmenu'. A continuación se muestra un ejemplo:
document.body.oncontextmenu=function(event) {
alert(" Right click! ");
};
el código anterior alerta un poco de texto cuando se presiona el botón derecho. Si no desea que aparezca el menú predeterminado del navegador, puede agregar return false; Al final del contenido de la función. Gracias.
Sí, es un evento de mousedown de JavaScript. También hay un complemento jQuery para hacerlo