2010-04-09 9 views
7

J'essaie d'ouvrir quelques liens dans une nouvelle fenêtre en utilisant Jquery plutôt que _blank afin que mon html reste valide. Mon code ressemble à ceci: méthodeOuvrir le lien dans une nouvelle fenêtre avec Jquery

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

Cela fonctionne très bien, sauf lorsque le lien est contenu dans html, je l'ai placé sur la page en utilisant la charge Jquery(). Quelqu'un peut-il expliquer pourquoi et s'il vous plaît aider avec une solution?

Répondre

15

Mise à jour: Si vous lisez ceci dans un monde HTML5 + the target attribute is no longer deprecated (no longer missing, to be more accurate) comme it was in XHTML 1.0 (le contexte de la question initiale). Je suggère que si vous lisez ceci maintenant, ignorez tout sous, utilisez l'attribut target si elle jette un avertissement de conformité ou non, tous les navigateurs le supportent et il n'aurait jamais dû être omis ... le fait qu'il était rajouté dans une spécification ultérieure montre l'enlever était une erreur.


Cela fonctionne:

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

Cependant, ID doit être unique, si vous chargez plus de 1, ils doivent avoir la place d'une classe, comme ceci:

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

Et jQuery comme ceci:

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

La façon dont les normes en conformité serait:

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

@Nick merci encore une fois! – mtwallet

+1

-1 _blank a été déprécié! Même si vous travaillez autour de la validation en ajoutant l'attribut en utilisant un script. –

+0

@James - Je corrigeais le problème du clic non contraignant de l'OP.S'ils veulent contourner la validation, c'est leur appel, pas le mien à faire, la question est sur le javascript ne fonctionne pas. Comme note secondaire, * normalement * je suis d'accord, mais '_blank' étant obsolète du tout était une erreur légèrement retardée de la part du W3C. Je vais vous parier 100 $ que dans 5 ans ** tous les navigateurs ** supporteront toujours '_blank'. –

1

Utilisez .live()

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

Votre code va se lier à des éléments cliquez sur l'événement qui sont disponibles à la charge de la page et non aux éléments créés dynamiquement. Live liera les événements aux éléments créés dynamiquement également.

1

Au contraire ce que les autres pensent, l'attribut target avec toutes ses valeurs sont pas dépréciée selon les spécifications du HTML5.

Vous pouvez le lire par ici: http://dev.w3.org/html5/markup/a.html

L'attribut cible sur l'élément a été dépréciée dans une version précédente de HTML, mais n'est dépréciée plus, comme utiles dans le Web applications, en particulier en combinaison avec l'élément iframe.

Alors, n'hésitez pas à l'utiliser en HTML5.

+0

Génial! On dirait que le W3C a réalisé son erreur: P –

+0

Ce n'est pas tout à fait exact (en ce qui concerne le contexte original de cette question). Il * était * obsolète (manquant, mais vous l'entendrez comme obsolète) en XHTML, il est rajouté en XHTML plus tard (ce que je suis entièrement d'accord avec, il n'aurait jamais dû être déprécié en premier lieu). –

+0

Oui, il était obsolète, mais à partir de maintenant, en HTML5, il est autorisé. – Tower

Questions connexes