2012-11-07 16 views
6

Mam link (kotwicę), do którego dołączono href, aby przejść do określonego adresu URL, powiedz "www.bla.com".Ctrl + kliknięcie na linki z przyciskami obsługi kliknięć

<a href='http://www.bla.com' /> 

Mam też click obsługi dołączoną do linku, który wykonuje pewne czynności, a następnie otwiera się widok HTML w tym samym oknie. Wszystko działa doskonale.

Jednak, gdy użytkownik używa "ctrl + kliknięcie", aby otworzyć łącze w nowej karcie/oknie, procedura obsługi kliknięć wydaje się mieć pierwszeństwo i otwiera widok HTML w tym samym oknie. Ale chcę zachować zachowanie "ctrl + kliknięcie" i pozwolić użytkownikowi otworzyć łącze w nowej karcie/oknie (tak jak normalny link). Jak mogłem to zrobić?

Z góry dziękuję!

+0

Czego używasz w swoim treserze? Próbowałem go odtworzyć i jedyne co mogłem znaleźć, to zatrzymanie, że jest to 'alert' – Bankzilla

+0

Istnieje wiele kluczy, które zmieniają domyślne zachowanie. Lepiej jest użyć czegoś takiego jak "filtrowane kliknięcia" (https://github.com/bfred-it/filter-altered-clicks), aby sobie z tym poradzić. –

Odpowiedz

6
function process(e){ 
    var evt = e ? e:window.event; 
    if(evt.ctrlKey) 
     alert("ctrlClicked"); 
}​ 

evt.ctrlKey zwróci true, jeśli klawisz sterujący jest wciśnięty, można napisać swoje warunki wewnątrz „if” blok, przetestowałem to na chromie i tylko FF.

0
<a target="_blank" href='http://www.bla.com' /> 

Dodaj target = "_ blank" do znacznika zakotwiczenia.

+0

to nie działa, obawiam się, ponieważ _blank otwiera łącze w nowej karcie/oknie, nawet przy standardowym kliknięciu (nie to, co chcę). – Saket

+0

Można dodać detektor kluczy do wykrycia po przytrzymaniu klawisza Ctrl, a następnie po prostu zmienić parametr docelowy zgodnie z tym, czy jest wciśnięty, czy nie. (trzymany? "_blank": "_self") –

0

Związana z numerem click event object właściwość ctrlKey zostanie ustawiona na true, jeśli naciśnięto klawisz sterujący (lub odpowiednik) po kliknięciu. Sprawdź obiekt zdarzenia i jeśli klawisz kontrolny został naciśnięty, nie rób tego "widoku HTML".

<a href="#" onclick="alert(event.ctrlKey);">Click me!</a> 

Jednakże, jeśli użytkownik aktywuje łącze w inny sposób, może dojść do zdarzenia kliknięcia lub nie.

np.

  1. prawy przycisk -> "Otwórz w nowej/oknie zakładki" - brak zdarzenia click (Firefox, IE)
  2. TAB, aby skupić się na link, naciśnij enter - depesze kliknij zdarzenie (Firefox, IE)
1

Być może coś takiego?

function onclick(e){ 
    var event = e ? e:window.event; 
    this.target = event.ctrlKey?"_blank":"_self"; 
}​ 
Powiązane problemy