2009-04-01 18 views
58

¿Cómo puedo activar alguna acción con un clic derecho después de deshabilitar el menú contextual del navegador?Evento de vinculación al clic derecho del mouse

Intenté esto. . .

$(document).ready(function(){ 
    $(document).bind("contextmenu",function(e){ 
     $('.alert').fadeToggle(); 
     return false; 
    }); 
}); 
+1

Ver http://stackoverflow.com/a/2725963/287948 –

+0

Usted estamos tratando de hacer algo, ¡después de que la función regrese! – Tom

Respuesta

93

No hay incorporado en el controlador de eventos OnContextMenu en jQuery, pero se puede hacer algo como esto:

$(document).ready(function(){ 
    document.oncontextmenu = function() {return false;}; 

    $(document).mousedown(function(e){ 
    if(e.button == 2) { 
     alert('Right mouse button!'); 
     return false; 
    } 
    return true; 
    }); 
}); 

Básicamente cancelar el evento OnContextMenu del elemento DOM para desactivar el menú contextual del navegador , y luego capturo el evento mousedown con jQuery, y allí puede saber en el argumento del evento qué botón ha sido presionado.

Puede probar el ejemplo anterior here.

+0

¿No es '$ (documento) [0]' lo mismo que 'documento'? – configurator

+0

@configurator, sí, es un error tipográfico. Gracias :) – CMS

+1

Tu respuesta es incorrecta: http://jsfiddle.net/Zmdzv/ – andrewrk

0

¿Es contextmenu un evento?

me gustaría utilizar onmousedown o onclick a continuación, coger botón propiedad la MouseEvent 's para determinar qué botón se ha pulsado (0 = izquierda, 1 = medio, 2 = derecha).

47

La función vuelve demasiado pronto. He añadido un comentario en el código de abajo:

$(document).ready(function(){ 
    $(document).bind("contextmenu",function(e){ 
     return false; 
     $('.alert').fadeToggle(); // this line never gets called 
    }); 
}); 

intentar cambiar la return false; con la siguiente línea.

+6

+1, vinculante 'contextmenu' ahora es compatible! –

+0

"preguntado el 1 de abril de 2009" - Supongo que esto no es significativo. ;) –

+0

@zourtney ¿Qué te hace concluir eso? Los documentos de jQuery no mencionan nada sobre el soporte de 'contextmenu' ... – bart

15

Simplemente use el controlador de eventos. Algo como esto debería funcionar:

$('.js-my-element').bind('contextmenu', function(e) { 
    e.preventDefault(); 
    alert('The eventhandler will make sure, that the contextmenu dosn't appear.'); 
}); 
2

He encontrado esta respuesta aquí y la estoy usando así.

Código de mi biblioteca:

$.fn.customContextMenu = function(callBack){ 
    $(this).each(function(){ 
     $(this).bind("contextmenu",function(e){ 
      e.preventDefault(); 
      callBack(); 
     }); 
    }); 
} 

Código de la escritura de mi página:

$("#newmagazine").customContextMenu(function(){ 
    alert("some code"); 
}); 
1
document.oncontextmenu = function() {return false;}; //disable the browser context menu 
$('selector-name')[0].oncontextmenu = function(){} //set jquery element context menu 
0

Para desactivar el menú del botón derecho contexto en todas las imágenes de una página simplemente hacer esto con lo siguiente:

jQuery(document).ready(function(){ 
    // Disable context menu on images by right clicking 
    for(i=0;i<document.images.length;i++) { 
     document.images[i].onmousedown = protect; 
    } 
}); 

function protect (e) { 
    //alert('Right mouse button not allowed!'); 
    this.oncontextmenu = function() {return false;}; 
} 
0

.contextmenu método: -

Trata de la siguiente manera

<div id="wrap">Right click</div> 

<script> 
$('#wrap').contextmenu(function() { 
    alert("Right click"); 
}); 
</script> 

.mousedown método: -

$('#wrap').mousedown(function(event) { 

     if(event.which == 3){ 
      alert('Right Mouse button pressed.'); 
     } 
}); 
Cuestiones relacionadas