2009-11-25 14 views
55

Ich verwende das onclick Ereignis einer Hash-Verknüpfung, um eine <div> als Popup zu öffnen. Aber der mittlere Klick löst das onclick Ereignis nicht aus, aber nimmt nur den href Attributwert des Links und lädt die URL in einer neuen Seite. Wie kann ich den mittleren Klick verwenden, um das <div> als Popup zu öffnen?Auslösen onclick Ereignis mit der mittleren Maustaste

+13

Ich verstehe immer noch nicht, wie das Problem gelöst wurde, wenn der mittlere Klick nicht das Onclick-Ereignis auslöst. –

+1

@ TomášZato Browser feuern kein "Klick" -Ereignis mit einem mittleren Klick, aber sie können ein "MouseUp" -Ereignis auslösen. Dann kann das JavaScript-Framework dies mit einer "Klick" -Aktion verbinden, um Sie zu verwirren. Ich empfehle das Lesen von http://www.unixpapa.com/js/mouse.html – rds

Antwort

53

Die Antwort von beggs ist korrekt, aber es klingt so, als ob Sie die Standardaktion des mittleren Klicks verhindern möchten. In diesem Fall sind die Standardaktion des Ereignisses die folgenden

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

preventDefault() stoppt.

+18

Beachten Sie, dass '.live' veraltet ist und zugunsten von' .on' entfernt wurde. – Neal

+5

funktioniert nicht in Firefox –

+0

Um dies in FF arbeiten zu lassen: var evt = e || Fenster.Ereignis; –

19

können Sie

event.button

verwenden geklickt, welche Maustaste wurde zu identifizieren.

Gibt einen ganzzahligen Wert zurück, der die Schaltfläche angibt, die den Status geändert hat.

  • 0 für Standard 'Klick', in der Regel linke Taste
  • 1 für mittlere Taste, in der Regel Rad-Klick
  • 2 für die rechte Taste, in der Regel der rechte Maustaste

Beachten Sie, dass diese Konvention wird nicht im Internet Explorer verfolgt: siehe QuirksMode für Details.

Die Reihenfolge der Schaltflächen hängt davon ab, wie das Zeigegerät konfiguriert wurde.

Lesen Sie auch

Which mouse button has been clicked?

Es gibt zwei Eigenschaften out für die Suche, die Maustaste geklickt wurde: der und Taste. Bitte beachten Sie , dass diese Eigenschaften nicht immer auf einem Klick-Ereignis arbeiten. Um sicher eine eine Maustaste zu erkennen, müssen Sie die mousedown oder mouseup Ereignisse verwenden.

+3

Ich würde empfehlen, 'event.which' zu verwenden, da es in den Browsern in der jQuery-Quellzeile standardisiert wurde - Zeile 2756 - 'if (! event.which && event.button) event.which = (ereignis.button & 1? 1: (ereignis.button & 2? 3: (ereignis.button & 4? 2: 0))); ' –

+1

@RussCam 'MouseEvent.which' ist in keiner Spezifikation definiert, sondern' MouseEvent.Schaltfläche "ist in DOM L2 Events definiert. – Oriol

+0

@Oriol korrekt, aber unterschiedlich über verschiedene Browser-Anbieter implementiert. Das OP hat die Frage mit jQuery versehen, deshalb habe ich vorgeschlagen, 'event.which' zu verwenden, aber ich hätte ausgearbeitet, dass' MouseEvent.which' nicht Teil der offiziellen Spezifikation ist. –

6

jQuery ein .which Attribut für das Ereignis, das nach rechts, wie 1, 2, 3. In diesem Fall möchten Sie 2.

Verwendung der Klick-Taste ID von links gibt:

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

Adamantium Antwort wird auch funktionieren, aber Sie müssen für IE aufpassen, wie er bemerkt:

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

auch die 0.123.Attribut ist 0-indiziert nicht 1-indexiert wie .which.

+0

kann ich die Funktionalität von Mozilla Browser überschreiben !! zB mit einem linken Klick öffnet sich ein Popup .... aber für den mittleren Klick öffnet sich kein Popup und ein neuer Tab wird geöffnet, in dem sich das Popup nicht öffnet .. also möchte ich einen mittleren Klick außer Kraft setzen Funktionalität von Mozilla .... –

+0

Mozilla hat eine Einstellung, um alle Popups in einem neuen Tab statt einem neuen Fenster zu öffnen. Wenn der Benutzer diese Option aktiviert hat, dann denke ich nicht, dass Sie etwas tun können. Wenn dies nicht der Fall ist, können Sie einen Code oder einen Link zur Problemseite veröffentlichen? – beggs

+0

Es funktioniert nicht mit Klickereignis in FF. – l00k

6

Die richtige Methode ist .on zu verwenden, da .live ist veraltet und dann von jQuery entfernt:

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

Oder wenn Sie die „live“ wie Gefühl und #foo wollen, ist nicht auf Ihrer Seite auf Dokument Start:

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

original answer

3

Ich weiß, dass ich zu spät zur Party bin, aber für diejenigen, die immer noch Probleme mit dem mittleren Klick haben, überprüfen Sie, ob Sie das Event delegieren. Im Falle einer Delegierung wird das Ereignis click nicht ausgelöst. Vergleichen:

Dies funktioniert für mittlere Klicks:

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

Dies funktioniert nicht für mittlere Klicks:

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

Wenn Sie immer noch in der Mitte klicken mit verfolgen, müssen Ereignisdelegation, die einzige Möglichkeit, wie in der entsprechenden jQuery ticket angegeben, ist mousedown oder 01 zu verwendenstattdessen. Wie so:

Dies funktioniert für delegierte Mitte Klicks:

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

See it online here.

4

Diese Frage ist ein bisschen alt, aber ich fand eine Lösung:

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

Chrome nicht feuern "klicken Sie auf" Ereignis für das Mausrad

Arbeit in FF und Chrome

5

ich in der Regel hasse es, wenn Leute Alternativen anstelle von Lösungen anbieten, aber da bereits Lösungen bereitgestellt wurden, werde ich meine eigene Regel brechen.

Websites, auf denen die Funktion zum mittleren Klicken überschrieben wird, neigen dazu, mich wirklich zu stören. Normalerweise klicke ich mit der mittleren Maustaste, weil ich den neuen Inhalt in einem neuen Tab öffnen möchte, während ich den aktuellen Inhalt ungehindert sehen kann. Immer wenn Sie die Funktion für den mittleren Klick allein lassen und den relevanten Inhalt über das HREF-Attribut des angeklickten Elements verfügbar machen können, sollten Sie davon ausgehen, dass Sie dies tun sollten.

Verwandte Themen