2016-12-12 2 views
7

Ich habe diesen Code in meiner Chrome-Erweiterung, sodass ich <div href="url"> als Link verwenden kann. Dies funktioniert bis vor kurzem wie erwartet. (Links - im aktuellen Tab öffnen, Mitte - im neuen Tab öffnen). Jetzt registriert es nur noch linke Klicks.Mittlere Schaltfläche Klickereignis

$('div.clickable-href').on('click', function(e) { 
    switch(e.which) { 
    case 1: 
     window.location = $(this).attr('href'); 
     break; 
    case 2: 
     window.open($(this).attr('href')); 
     break; 
    case 3: 
     break; 
    } 
}); 

Ich benutze <div href="url"> und <span href="url"> für Links damit der Browser nicht auf die Statusleiste nicht angezeigt.

Ich habe einige ähnliche Fragen gefunden, aber alle Antworten schlagen vor, .on('mousedown', (e) => {...}) zu verwenden. Ich brauche dieses Ereignis, um nur auszulösen, wenn es ein mousedown Ereignis gefolgt von einem mouseup Ereignis gab.
Was noch frustrierender ist, ist dass funktioniert, aber es nicht mehr so ​​funktioniert.


EDIT:
Dies ist ein Problem für Chrome 55. Unter Linux (wo ich zum ersten Mal die Anomalie bemerkt) Chrome wurde bereits v55 aktualisiert. Auf meinem Windows-System war es v54, und der mittlere Klick funktionierte. Die Aktualisierung von 54 auf 55 verursachte die gleichen Probleme.

+0

Beachten Sie, dass Benutzer erwarten können, dass Ihr "Link" auch in einem neuen Tab geöffnet wird, wenn Sie ap machen rimary click mit Schlüssel ( auf Mac). Sie müssen auch mit diesen Fällen und anderen plattformspezifischen Konventionen umgehen, die Sie nicht vorhersehen können. Versuchen Sie, einen Weg zu finden, ein echtes Ankerelement für Ihren Link zu verwenden, damit der Browser es am besten handhaben kann. –

Antwort

11

Ich bemerkte ein Problem mit Maustaste # 3 in Chrom (nicht auf anderen Browsern getestet).

Also hier ist eine Lösung für sie (add contextmenu zu den auslösenden Ereignissen):


EDIT
Dank Matevž Fabjančičuse des nützlichen Kommentar.

Ich bestätige, dass seit Chrome 55 (ich es vor einer Minute aktualisiert), die Maus Mitte Klick nun das neue auxclick Ereignis auslöst.
So ein click Ereignis kann nur durch Maustaste 1.

Hinweis ausgelöst werden, dass auxclick durch Maustaste ausgelöst wird, 2 und 3

Reference here.

$('div.clickable-href').on('click auxclick contextmenu', function(e) { 
 
    e.preventDefault(); 
 
    console.log(e.which); 
 
    console.log(e.type); 
 
    
 
    if(e.type=="contextmenu"){ 
 
     console.log("Context menu prevented."); 
 
     return; 
 
    } 
 
          
 
    switch(e.which) { 
 
     case 1: 
 
      //window.location = $(this).attr('href'); 
 
      console.log("ONE"); 
 
      break; 
 
     case 2: 
 
      //window.open($(this).attr('href')); 
 
      console.log("TWO"); 
 
      break; 
 
     case 3: 
 
      console.log("THREE"); 
 
      break; 
 
    } 
 
});
.clickable-href{ 
 
    width:20em; 
 
    background-color:#DDD; 
 
    text-align:center; 
 
    padding:4em 0; 
 
    border-radius:8px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="clickable-href"> 
 
    CLICK ME - Test all 3 mouse buttons! 
 
</div>

+1

Das löst nur 1 und 3 für mich aus.Ich fange an zu denken, dass dies ein Problem mit Chrome für Linux ist ... –

+1

Dies ist ein Problem für Chrome 55. Auf Linux (wo ich zuerst die Anomalie bemerkte) war Chrome bereits auf v55 aktualisiert. Auf meinem Windows-System war es v54, und der mittlere Klick funktionierte. Die Aktualisierung von 54 auf 55 verursachte die gleichen Probleme. –

+0

Ich bestätige das auch. Und ich habe die Antwort gefunden. ;) –

3

In Linux Chrome 55 treten die folgenden Ereignisse für mich:

Maustaste 1: click
Maustaste 2: contextmenu
Mittlere Maustaste: auxclick