2013-05-07 11 views
15

Sto provando a creare un collegamento che, una volta fatto clic, cambia il suo attributo href e quindi va in quella posizione.Modifica di href di collegamenti dopo clic con jQuery

mio HTML è:

<a href="http://google.com" rel="group" data-wpurl="http://yahoo.com"></a> 

Quando si fa clic, vorrei che il browser per andare alla dati di posizione-wpurl, non luogo href. Il motivo per cui sto usando un attributo dati è dovuto all'applicazione che sto usando richiede l'uso di href ... non rilevante qui.

mio jQuery è:

$('a[rel="group"]').on('click', function(e) { 
     e.preventDefault(); 
     var wpurl = $(this).attr("data-wpurl"); 
     $(this).attr('href', wpurl); 
}); 

Sto usando e.preventDefault(); per impedire al browser di portare l'utente a href. Dopo che l'attributo dei dati è stato assegnato a href, come faccio a fare scattare un clic? L'utilizzo di trigger('click') e click(); non funziona!

Qualche idea?

+0

Può essere fatto ma solo curioso sul caso d'uso ... – Ejaz

+0

Ho bisogno di href per tutto tranne che mobile ... Quindi, all'interno di mio js, ​​sto usando un condizionale. Voglio che il collegamento attivi diversi URL in base alle dimensioni dello schermo. – JCHASE11

risposta

16

Sarebbe più facile cambiare solo la posizione immediatamente:

e.preventDefault(); 
location.href = $(this).data('wpurl'); 
+1

questo. se hai intenzione di portare l'utente a una nuova pagina, non c'è ragione di aggiornare effettivamente il href del link. – sgroves

6

Utilizzare onmousedown. Google utilizza questo metodo nella pagina dei risultati di ricerca in modo che possano tenere traccia di ciò che hai fatto clic. Se vuoi vedere dove andrà il link, fai clic con il tasto destro invece di sinistra. Entrambi attivano l'evento onmousedown.

http://jsfiddle.net/afLE3/

<a href="http://google.com" data-wpurl="http://yahoo.com" onmousedown="rwt(this)">CLICK HERE</a> 

<script type="text/javascript"> 
    rwt = function(e){ 
    e.href = $(e).data('wpurl'); 
    } 
</script> 
2

penso che l'originale jQuery è bene, tranne per l'e.preventDefault(): questo si fermerà il lancio dell'evento, non importa quello che fai per l'attributo href dopo quel punto.

$('a[rel="group"]').on('click', function(e) { 
     var wpurl = $(this).attr("data-wpurl"); 
     $(this).attr('href', wpurl); 
}); 

Tutto il codice precedente verrà eseguito prima che la pagina venga aggiornata.

15

soluzione simile, ma senza la necessità di chiamare e.preventDefault()

$('a[rel="group"]').on('click', function(e) { 
    e.originalEvent.currentTarget.href = $(this).data('wpurl'); 
}); 

dal mio punto di vista, questa è una soluzione più generale, più pulito, in quanto questo non cambierà il comportamento del browser di default (ad esempio: quando il l'utente fa clic con la rotellina del mouse sul collegamento, con la soluzione Jack non viene aperta nessuna nuova scheda)

+0

Grazie per questo. Questa era la risposta più semplice e spiegata più semplice. –

Problemi correlati