61 votes

Lier l'événement au clic droit de la souris

Comment puis-je déclencher une action avec un clic droit après avoir désactivé le menu contextuel du navigateur ?

J'ai essayé ceci

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

1 votes

0 votes

Vous essayez de faire quelque chose après la fonction revient !

105voto

CMS Points 315406

Il n'y a pas de gestionnaire d'événement oncontextmenu intégré dans jQuery, mais vous pouvez faire quelque chose comme ceci :

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

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

En gros, j'annule l'événement oncontextmenu de l'élément DOM pour désactiver le menu contextuel du navigateur, puis je capture l'événement mousedown avec jQuery, et là, vous pouvez savoir dans l'argument de l'événement quel bouton a été pressé.

Vous pouvez essayer l'exemple ci-dessus ici .

0 votes

N'est-ce pas ? $(document)[0] la même chose que document ?

0 votes

@configurator, oui c'est une faute de frappe. Merci :)

34 votes

"contextmenu" est désormais pris en charge !

49voto

Bennett McElwee Points 5750

La fonction revient trop tôt. J'ai ajouté un commentaire au code ci-dessous :

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

Essayez d'échanger le return false; avec la ligne suivante.

0 votes

"demandé le 1er avril 2009" - Je suppose que ce n'est pas significatif ;)

0 votes

@zourtney Qu'est-ce qui vous fait conclure cela ? La documentation de jQuery ne mentionne pas le support de 'contextmenu'...

15voto

Simon Points 81

Il suffit d'utiliser le gestionnaire d'événements. Quelque chose comme ceci devrait fonctionner :

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

2voto

Güven Altuntaş Points 105

J'ai trouvé cette réponse ici et je l'utilise comme ceci.

Code de ma bibliothèque :

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

Code du script de ma page :

$("#newmagazine").customContextMenu(function(){
    alert("some code");
});

0voto

BryanH Points 2725

Est contextmenu un événement ?

J'utiliserais onmousedown o onclick puis saisissez le MouseEvent 's bouton pour déterminer quel bouton a été pressé (0 = gauche, 1 = milieu, 2 = droite).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X