2016-12-12 27 views
7

Mam ten fragment kodu w moim rozszerzeniu Chrome, więc mogę użyć <div href="url"> jako łącza. Wcześniej działało zgodnie z oczekiwaniami. (Po lewej - otwórz w bieżącej zakładce, Środek - otwórz w nowej zakładce). Teraz rejestruje tylko kliknięcia lewym przyciskiem myszy.Kliknij środkowy przycisk kliknij wydarzenie

$('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; 
    } 
}); 

używam <div href="url"> i <span href="url"> linków więc przeglądarka nie wyświetla pasek stanu.

Znalazłem kilka podobnych pytań, ale wszystkie odpowiedzi sugerują użycie .on('mousedown', (e) => {...}). Potrzebuję tego zdarzenia do uruchomienia tylko w przypadku zdarzenia mousedown, po którym następuje zdarzenie mouseup.
Jeszcze bardziej frustrujące jest to, że ten używał do pracy, ale już tego nie robi.


EDIT:
Jest to problem dla Chrome 55. Linux (gdzie po raz pierwszy zauważył anomalię) Chrome został już zaktualizowany do V55. W moim systemie Windows był to v54, a średnie kliknięcie działało. Aktualizacja z 54 na 55 spowodowała te same problemy.

+0

Pamiętaj, że użytkownicy mogą oczekiwać, że Twój "link" również otworzy się w nowej karcie podczas wykonywania ap kliknij na rimary trzymając klucz ( na Macu). Trzeba też zająć się tymi sprawami i ewentualnymi innymi konwencjami, których nie można przewidzieć. Spróbuj znaleźć sposób na użycie prawdziwego elementu zakotwiczenia dla twojego linku i pozwól przeglądarce najlepiej sobie z tym poradzić. –

Odpowiedz

11

Zauważyłem problem z przyciskiem myszy # 3 w chrome (nie przetestowałem go w innych przeglądarkach).

Więc tutaj jest poprawka dla niego (dodaj contextmenu do wydarzeń wyzwalających):


EDIT
Dzięki użytecznej komentarzu Matevž Fabjančičuse użytkownika.

Potwierdzam, że od Chrome 55 (I zaktualizowany do niej minuty temu), mysz middle click teraz wyzwala nową auxclick wydarzenie.
Więc wydarzenie click mogą być wywołane tylko przez przycisk myszy 1.

Zawiadomienie że auxclick jest wyzwalany przyciskiem myszy 2 i 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

To wyzwala tylko 1 i 3 dla mnie.Zaczynam myśleć, że to jest problem Chrome na Linux ... –

+1

To jest problem dla Chrome 55. W systemie Linux (gdzie po raz pierwszy zauważyłem anomalię) Chrome został już zaktualizowany do wersji 55. W moim systemie Windows był to v54, a średnie kliknięcie działało. Aktualizacja z 54 na 55 spowodowała te same problemy. –

+0

Ja też to potwierdzam. I znalazłem odpowiedź. ;) –

3

W Linux Chrome 55 są następujące zdarzenia dla mnie:

przycisk myszy 1: click
przycisk myszy 2: contextmenu
Bliski przycisk myszy: auxclick