wiem, że to jest zrobione i załatwione wiele, ale oto co używam, aby rozwiązać problem w mojej aplikacji.
if (!e.target.hasAttribute("target")) {
e.preventDefault();
e.target.setAttribute("target", "_blank");
e.target.click();
return;
}
zasadzie to, co się tu dzieje to biegnę czek jeśli link zawiera atrybut target=_blank
. Jeśli nie, zatrzymuje połączenie, uruchamia je, ustawia je do otwarcia w nowym oknie, a następnie programowo klika.
Można pójść o krok dalej i pominąć zatrzymanie oryginalnego kliknięcie (i uczynić swój kod o wiele bardziej zwarte), próbując w ten sposób:
if (!e.target.hasAttribute("target")) {
e.target.setAttribute("target", "_blank");
}
Jeśli uzywasz jQuery streszczenie dala realizacja dodawania atrybutu cross-browser, należy użyć tego zamiast e.target.setAttribute("target", "_blank")
:
jQuery(event.target).attr("target", "_blank")
może trzeba przerobić go aby pasowały do dokładnego przypadków użycia, ale oto jak ja porysowana własne swędzenie.
Oto z tego w akcji, z którymi możesz zadzierać.
(Link w jsfiddle wraca do tej dyskusji .. nie potrzebują nowej karty :))
Hm? 'target =" _ top "' nie otwiera się w nowym oknie - 'target =" _ blank "' does. – Tomalak
Jeśli łącze jest już otwierane w nowym oknie (ze względu na target = "_ blank"), a moduł obsługi kliknięć javascript już aktualizuje bazę danych, dlaczego musiałbyś w ogóle otworzyć nowe okno z Javascriptem? –