2010-04-09 11 views
7

Ich versuche, ein paar Links in einem neuen Fenster zu öffnen, indem ich Jquery anstelle von _blank verwende, damit mein HTML gültig bleibt. Mein Code sieht wie folgt aus:Link in neuem Fenster mit Jquery öffnen

$(document).ready(function() { 
    $('a[id="external-url"]').click(function(){ 
     $(this).attr('target','_blank'); 
    }); 
}); 

Dies funktioniert gut, außer wenn der Link im HTML enthalten ist, ich auf der Seite platziert haben die JQuery load() -Methode verwendet wird. Kann jemand erklären warum und bitte helfen Sie mit einer Lösung?

Antwort

15

Update: Wenn Sie dies in einer HTML5 + Welt gerade lesen the target attribute is no longer deprecated (no longer missing, to be more accurate) als it was in XHTML 1.0 (den ursprünglichen Kontext Frage). Ich schlage vor, wenn Sie dies jetzt lesen, ignorieren alles unter, Verwenden Sie das target Attribut, ob es eine Kompatibilitätswarnung oder nicht wirft, unterstützen alle Browser es und es hätte nie ausgelassen werden müssen ... die Tatsache war es hinzugefügt in einer späteren Spezifikation zeigt das Entfernen war ein Fehler.


Diese Arbeit wird:

$('a#external-url').live('click', function(){ 
    $(this).attr('target','_blank'); 
}); 

Allerdings sollten IDs eindeutig sein, wenn Sie mehr als 1 einlegen, müssen sie stattdessen eine Klasse haben, wie folgt aus:

<a href="http://google.com" class="exteral-url">Google</a> 

Und jQuery wie folgt aus:

$('a.external-url').live('click', function(){ 
    $(this).attr('target','_blank'); 
}); 

Die standardkonforme Art und Weise wäre:

$('a.external-url').live('click', function(e){ 
    window.open(this.href); 
    e.preventDefault(); //or return false; 
}); 
+0

@Nick danke noch einmal! – mtwallet

+1

-1 _blank ist veraltet! Obwohl Sie mit der Validierung arbeiten, indem Sie das Attribut mithilfe des Skripts hinzufügen. –

+0

@James - Ich habe das Problem behoben, dass der Klick vom OP nicht bindend ist.Wenn sie Validierung umgehen wollen, das ist ihr Aufruf, nicht meins zu machen, ist die Frage über das Javascript funktioniert nicht. Als eine Randnotiz, * normalerweise * würde ich zustimmen, aber '_blank' wurde überhaupt nicht beachtet, war ein leicht verzögerter Fehler auf W3C's Seite. Ich wette 100 $ in 5 Jahren ab jetzt ** jeder ** Browser wird '_blank' unterstützen. –

1

Verwenden .live()

$('a[id="external-url"]').live("click", function(){ 
     $(this).attr('target','_blank'); 
    }); 

Ihr Code wird binden Ereignis auf Elemente klicken, die auf der Seite zu laden verfügbar sind und nicht dynamisch erstellt Elemente. Live bindet Ereignisse an Elemente, die auch dynamisch erstellt werden.

1

Im Gegenteil, was andere glauben, das target Attribut mit all seinen Werten nicht veraltet per HTML5-Spezifikation sind.

Sie können es über hier lesen: http://dev.w3.org/html5/markup/a.html

Das Zielattribut auf dem ein Element wurde in einer früheren Version von HTML veraltet, wird aber nicht mehr weiterentwickelt, wie es in Web Anwendungen nützlich, insbesondere in Kombination mit dem iframe-Element.

Also, fühlen Sie sich frei, es in HTML5 zu verwenden.

+0

Super! Sieht so aus, als hätte W3C ihren Fehler erkannt: P –

+0

Dies ist nicht ganz korrekt (in Bezug auf den ursprünglichen Kontext dieser Frage). Es * wurde * in XHTML veraltet (fehlt, aber Sie hören es als veraltet), es wird später wieder in XHTML hinzugefügt (was ich völlig stimme, es hätte niemals veraltet sein sollen). –

+0

Ja, es war veraltet, aber ab jetzt ist es in HTML5 erlaubt. – Tower

Verwandte Themen