2009-11-25 5 views
55

J'utilise l'événement onclick d'un lien haché pour ouvrir une fenêtre contextuelle <div>. Mais le clic du milieu ne déclenche pas l'événement onclick mais prend uniquement la valeur d'attribut href du lien et charge l'URL dans une nouvelle page. Comment puis-je utiliser le clic du milieu pour ouvrir le <div> en tant que popup?Déclenchement d'un événement onclick en utilisant le clic du milieu

+13

Je ne comprends toujours pas comment le problème a été résolu, lorsque le clic du milieu ne déclenche pas l'événement onclick. –

+1

@ TomášZato Les navigateurs ne déclenchent pas un événement 'clic' avec un clic du milieu, mais ils peuvent déclencher un événement 'mouseup'. Ensuite, le framework javascript peut lier ceci à une action 'clic' pour vous perturber. Je recommande la lecture de http://www.unixpapa.com/js/mouse.html – rds

Répondre

53

La réponse de beggs est correcte, mais il semble que vous vouliez empêcher l'action par défaut du clic du milieu. Dans ce cas, inclure les éléments suivants

$("#foo").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

preventDefault() arrêtera l'action par défaut de l'événement.

+18

Gardez à l'esprit que '.live' a été déprécié et retiré au profit de' .on' – Neal

+5

ne fonctionne pas dans firefox –

+0

Pour que cela fonctionne dans FF, utilisez: var evt = e || window.event; –

19

Vous pouvez utiliser

event.button

pour identifier le bouton de la souris a été cliqué.

Renvoie une valeur entière indiquant le bouton ayant changé d'état.

  • 0 pour la norme 'clic', bouton généralement à gauche
  • 1 pour le bouton du milieu, généralement roue-cliquez
  • 2 pour le bouton droit, habituellement faites un clic droit

Notez que cette convention n'est pas suivi dans Internet Explorer: voir QuirksMode pour plus de détails.

L'ordre des boutons peut varier en fonction de la configuration du périphérique de pointage.

lire également

Which mouse button has been clicked?

Il y a deux propriétés pour trouver quel bouton de la souris a été cliqué : qui et le bouton. S'il vous plaît noter que ces propriétés ne fonctionnent pas toujours sur un événement de clic. Pour en toute sécurité détecter un bouton de la souris, vous devez utiliser les événements mousedown ou mouseup.

+3

Je recommanderais d'utiliser 'event.which' tel qu'il a été standardisé dans les navigateurs de la source jQuery - ligne 2756 -' if (! event.which && event.button) event.which = (event.button & 1? 1: (event.button & 2? 3: (event.button & 4? 2: 0))); ' –

+1

@RussCam Cependant, 'MouseEvent.which' n'est défini dans aucune spécification, mais' MouseEvent.button' est défini dans DOM L2 Events. – Oriol

+0

@Oriol correct, mais mis en œuvre différemment à travers différents fournisseurs de navigateurs. L'OP a étiqueté la question avec jQuery, c'est pourquoi j'ai suggéré d'utiliser 'event.which', mais j'aurais dû préciser que' MouseEvent.which' ne fait pas partie de la spécification officielle. –

6

jQuery fournit un attribut .which sur l'événement qui donne l'identifiant de bouton de clic de gauche à droite comme 1, 2, 3. Dans ce cas, vous voulez 2.

Utilisation:

$("#foo").live('click', function(e) { 
    if(e.which == 2) { 
     alert("middle button"); 
    } 
}); 
la réponse de

adamantium également fonctionner, mais vous devez faire attention pour IE comme il note:

$("#foo").live('click', function(e) { 
    if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) { 
    alert("middle button"); 
    } 
}); 

Rappelez-vous aussi leL'attributest indexé sur 0 et non indexé sur 1 comme .which.

+0

puis-je remplacer la fonctionnalité du navigateur mozilla !! Par exemple sur le clic gauche, il ouvre une fenêtre pop-up .... mais pour le clic du milieu, il n'ouvre pas un pop-up et un nouvel onglet est ouvert dans lequel le pop-up ne s'ouvre pas .. je veux remplacer un clic du milieu fonctionnalité de mozilla .... –

+0

Mozilla a un paramètre pour ouvrir tous les popups dans un nouvel onglet plutôt que dans une nouvelle fenêtre. Si l'utilisateur a cette option activée, je ne * pense * pas que vous pouvez faire quelque chose. Si ce n'est pas le cas, pouvez-vous poster du code ou un lien vers la page du problème? – beggs

+0

Cela ne fonctionne pas avec l'événement click dans FF. – l00k

6

La bonne méthode consiste à utiliser .on, comme .live a été désapprouvée puis enlevé de jQuery:

$("#foo").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

Ou si vous voulez que le « live » comme la sensation et #foo est pas sur votre page Document début:

$(document).on('click', '#foo', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

original answer

3

Je sais que je suis en retard pour la fête, mais pour ceux qui ont encore des problèmes avec le clic du milieu, vérifiez si vous déléguez l'événement. En cas de délégation, l'événement click ne se déclenche pas. Comparer:

Cela fonctionne pour les clics moyen:

$('a').on('click', function(){ 
    console.log('middle click'); 
}); 

Cela ne fonctionne pas pour les clics moyen:

$('div').on('click', 'a', function(){ 
    console.log('middle click'); 
}); 

Si vous avez besoin de suivre le milieu cliquez en utilisant délégation de l'événement, le seul moyen de contourner comme indiqué dans le jQuery ticket correspondant, est d'utiliser mousedown ou mouseup à la place. Comme si:

Cela fonctionne pour les clics moyen délégués:

$('div').on('mouseup', 'a', function(){ 
    console.log('middle click'); 
}); 

See it online here.

4

Cette question est un peu vieux, mais j'ai trouvé une solution:

$(window).on('mousedown', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
    } 
}); 

Chrome ne se déclenche pas "cliquez sur" événement pour la molette de la souris

Travail en FF et Chrome

5

Je habituellement Je déteste quand les gens offrent des alternatives au lieu de solutions, mais puisque des solutions ont déjà été fournies, je vais briser ma propre règle.

Les sites Web sur lesquels la fonctionnalité de clic du milieu est surchargé ont tendance à m'amuser vraiment, vraiment. Je suis généralement en train de cliquer sur le bouton parce que je veux ouvrir le nouveau contenu dans un nouvel onglet tout en ayant une vue non obstruée du contenu actuel. Chaque fois que vous pouvez laisser la fonctionnalité du clic du milieu seul et rendre le contenu pertinent disponible via l'attribut HREF de votre élément cliqué, je crois fermement que c'est ce que vous devriez faire.

Questions connexes