2012-02-13 14 views
6

Esempio di ciò che voglio fare: Su Facebook, facendo clic su un collegamento per aprirlo nella scheda corrente si attivano alcuni Javascript piuttosto che l'apertura del collegamento. Tuttavia, aprendolo in una nuova scheda (facendo clic con il pulsante destro del mouse o tenendo premuto Ctrl/Cmd) si aprirà il collegamento senza chiamare Javascript.Distinguere il collegamento aperto nella scheda corrente rispetto alla nuova scheda

Mi piacerebbe fare lo stesso con i miei collegamenti (il comportamento del collegamento dipende dal target). Ho il gestore di eventi onclick return false; per evitare di aprire il collegamento; ma ciò fa sì che Ctrl + clic non riesca ad aprire il collegamento. Come ottengo questo?

MODIFICA: I non si desidera che i collegamenti si aprano forzatamente in nuove finestre. IF un collegamento viene aperto in una nuova finestra, voglio che segua il href come al solito. Tuttavia, IF il collegamento viene aperto nella finestra corrente, anziché seguire il collegamento nella finestra corrente, voglio avere qualche esecuzione Javascript.

Facebook lo fa per aprire un'immagine in un "teatro" popup se la apri nella finestra corrente e la apri in una pagina intera se la apri in una nuova finestra.

Nota che cattura l'evento click sui link ed usando preventDefault() o return false provoca Cmd + Click (aperto in una nuova scheda) a fallire. In ogni caso, questo dovrebbe funzionare indipendentemente da come si apre il link - clicca, tasto Invio, ecc

EDIT 2: Sembra che hashchange/HTML5 pushState è il modo corretto per andare su questo

+0

Vuoi il link al sempre aperto in una nuova finestra? – ShankarSangoli

+0

non puoi semplicemente cambiare l'obiettivo in '_blank' su tutte le ancore? – ZeroDivide

risposta

3

Puoi impostare il href dell'ancora che punta a correggere l'URL. In questo modo, fare clic destro e aprire in una nuova scheda o finestra funzionerà correttamente.

Utilizzare jQuery per associare il gestore di eventi click all'ancora in questo modo.

$('a').click(function(e){ 
    //Do whatever javascript operation you want. 
    if(!e.ctrlKey){ 
     e.preventDefault();//Stop the page to navigate to the url set in href 
    } 
}); 

Demo

+0

Si prega di non confondere * link * (che sono elementi 'A' con un attributo' href') che sono una fonte per la navigazione, con * anchors * (che sono elementi 'A' con un attributo' name') che sono destinazioni. Gli elementi 'A' possono essere sia un * link * che un * anchor * allo stesso tempo, ma non è comune. – RobG

+0

Dipende dal requisito ma sì dovremmo lasciare che il collegamento si comporti come un collegamento. – ShankarSangoli

+0

Cmd + Click non riesce ad aprire il collegamento quando lo faccio –

Problemi correlati