2010-04-09 20 views
7

Estoy tratando de abrir algunos enlaces en una nueva ventana usando Jquery en lugar de _blank para que mi html siga siendo válido. Mi código es el siguiente:Abrir el enlace en una nueva ventana con Jquery

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

Esto funciona muy bien excepto cuando el enlace está contenida dentro de html que he colocado en la página utilizando el método de carga jQuery(). ¿Alguien puede explicar por qué y ayudar con una solución?

Respuesta

15

Actualización: Si estás leyendo esto en un mundo HTML5 + the target attribute is no longer deprecated (no longer missing, to be more accurate) como it was in XHTML 1.0 (el contexto pregunta original). Sugiero que si está leyendo esto ahora, ignore todo debajo de, use el atributo target si arroja una advertencia de conformidad o no, todos los navegadores lo admiten y nunca debería haber quedado fuera ... el hecho de que era añadido en una especificación posterior muestra que eliminarlo fue un error.


Esto funcionará:

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

Sin embargo, los ID debe ser único, si va a cargar más de 1, tienen que tener una clase en su lugar, como esto:

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

y jQuery así:

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

La manera compatible con las normas sería:

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

@Nick gracias una vez más! – mtwallet

+1

-1 _blank ha quedado obsoleto! Aunque está trabajando alrededor de la validación agregando el atributo usando script. –

+0

@James - Estaba solucionando el problema de que el clic no sea vinculante.Si quieren eludir la validación, esa es su decisión, no la mía, la cuestión es que el javascript no funciona. Como nota al margen, * normalmente * estoy de acuerdo, pero '_blank' está en desuso en absoluto fue un error levemente retrasado por parte del W3C. Apuesto a que $ 100 en 5 años a partir de ahora ** cada ** navegadores seguirá soportando '_blank'. –

1

Uso .live()

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

Su código liga el evento click a los elementos que están disponibles en la carga de la página y los elementos no creados dinámicamente. Live vinculará eventos a elementos que también se crean dinámicamente.

1

Al contrario de lo que otros creen, el atributo target con todos sus valores son no obsoleta según la especificación HTML5.

Se puede leer acerca de aquí: http://dev.w3.org/html5/markup/a.html

El atributo de destino en el elemento está desfasada y en una versión anterior de HTML, pero ya no está en desuso, como útiles en Web aplicaciones, en particular en combinación con el elemento iframe.

Así que siéntase libre de usarlo en HTML5.

+0

¡Impresionante! Parece que el W3C se dio cuenta de su error: P –

+0

Esto no es del todo exacto (con respecto al contexto original de esta pregunta). Está * obsoleto (falta, pero lo oirás como obsoleto) en XHTML, se vuelve a agregar en XHTML más tarde (lo cual estoy completamente de acuerdo con, nunca debió haber sido desaprobado en primer lugar). –

+0

Sí, estaba en desuso, pero a partir de ahora, en HTML5, está permitido. – Tower

Cuestiones relacionadas