2013-05-07 10 views
15

Ich versuche, eine Verknüpfung zu erstellen, die beim Klicken auf das href-Attribut wechselt und dann an diesen Speicherort geht.Ändern einer Verknüpfung href nach dem Klicken mit jQuery

Mein html ist:

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

Wenn Sie darauf klicken, würde ich den Browser auf die Daten-wpurl Ort gehen mögen, nicht href Lage. Der Grund, warum ich ein Datenattribut verwende, ist wegen der Anwendung, die ich verwende, erfordert die Verwendung der href ... nicht relevant hier.

Meine jQuery ist:

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

I e.preventDefault bin mit(); um zu verhindern, dass der Browser den Benutzer zur href führt. Nachdem das Datenattribut dem href zugewiesen wurde, wie kann ich dann einen Klick auslösen? Die Verwendung von trigger('click') und click(); funktioniert nicht!

Irgendwelche Ideen?

+0

Es kann aber nur neugierig auf den Use-Case gemacht werden ... – Ejaz

+0

ich brauche den href für alles außer mobil ... Also benutze ich innerhalb meiner js ein Konditional. Ich möchte, dass der Link abhängig von der Bildschirmgröße unterschiedliche URLs auslöst. – JCHASE11

Antwort

16

Es wäre einfacher, nur sofort die Position zu ändern:

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

dies. Wenn Sie den Benutzer zu einer neuen Seite führen, gibt es keinen Grund, die href des Links zu aktualisieren. – sgroves

6

Verwenden onmousedown. Google verwendet diese Methode auf der Suchergebnisseite, um zu verfolgen, auf was Sie geklickt haben. Wenn Sie sehen möchten, wo der Link angezeigt wird, klicken Sie mit der rechten Maustaste statt mit der linken Maustaste. Beide lösen das Onmousedown-Ereignis aus.

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

Ich denke, Ihre ursprüngliche jQuery ist in Ordnung, mit Ausnahme der e.preventDefault(): Dies ist der Fall, Brennen zu stoppen, egal, was Sie nach diesem Punkt auf das Attribut href tun.

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

Der gesamte obige Code wird ausgeführt, bevor die Seite aktualisiert wird.

15

ähnliche Lösung, aber ohne die Notwendigkeit von e.preventDefault()

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

aus meiner Sicht aufrufen, ist dies eine allgemeinere, sauberere Lösung, da dies nicht das Verhalten Standard-Browser ändern (zB: wenn die Benutzer klickt mit dem Mausrad auf den Link, mit Jacks Lösung wird kein neuer Tab geöffnet)

+0

Vielen Dank dafür. Dies war die verständlichste und am einfachsten erklärte Antwort. –

Verwandte Themen