2012-11-07 10 views
6

Ho un collegamento (ancora) che ha un href collegato per navigare in un URL specifico che dice "www.bla.com".Ctrl + clic sui collegamenti con gestori di clic

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

Ho anche un click gestore attaccato al collegamento che alcune azioni e quindi apre una visualizzazione HTML nella stessa finestra. Tutto funziona perfettamente.

Tuttavia, quando l'utente utilizza 'ctrl + clic' per aprire il collegamento in una nuova scheda/finestra, il gestore di clic sembra avere la precedenza e apre la vista html nella stessa finestra. Ma voglio mantenere il comportamento 'ctrl + clic' e consentire all'utente di aprire il collegamento in una nuova scheda/finestra (proprio come un normale link). Come potrei farlo?

Grazie in anticipo!

+0

Cosa stai usando nel gestore? Ho provato a replicarlo e l'unica cosa che ho trovato è che si è fermato un 'alert' – Bankzilla

+0

Ci sono molte chiavi che cambiano il comportamento predefinito. È meglio usare qualcosa come ['filter-altered-clicks'] (https://github.com/bfred-it/filter-altered-clicks) per gestirlo per te. –

risposta

6

evt.ctrlKey restituisce true se si preme il tasto di controllo, è possibile scrivere le condizioni all'interno del blocco "if", l'ho verificato solo per chrome e ff.

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

Aggiungi target = "_ blank" all'interno del tag di ancoraggio.

+0

che non funziona, temo, poiché _blank apre il collegamento in una nuova scheda/finestra anche su un clic standard (non quello che voglio). – Saket

+0

È possibile aggiungere un listener di chiavi per rilevare quando si tiene premuto ctrl, quindi semplicemente modificare il parametro target in base a se viene tenuto premuto o meno. (tenuto? "_blank": "_self") –

0

Il relativo click event object avrà la sua proprietà ctrlKey impostata su true se è stato premuto il tasto di controllo (o equivalente) quando si è verificato il clic. Controllare l'oggetto evento e se è stato premuto il tasto control, non eseguire la visualizzazione "HTML view".

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

Tuttavia, se l'utente attiva il collegamento in un altro modo, è possibile o meno ricevere un evento di clic.

ad es.

  1. tasto destro -> "aperto in una nuova scheda/finestra" - nessun evento click (Firefox, IE)
  2. Tab per concentrarsi sul collegamento, premere invio - dispacci evento Click (Firefox, IE)
1

Forse qualcosa del genere?

function onclick(e){ 
    var event = e ? e:window.event; 
    this.target = event.ctrlKey?"_blank":"_self"; 
}​ 
Problemi correlati