2010-05-13 29 views
86

Tengo un controlador de clic de un enlace específico, en el interior que yo quiero hacer algo similar a lo siguiente:¿Cómo puedo abrir un enlace en una nueva ventana?

window.location = url 

Necesito esto para abrir realmente el URL en una nueva ventana, sin embargo, ¿cómo hago esto ?

Respuesta

185

Te puede gustar:

window.open('url', 'window name', 'window settings') 

jQuery:

$('a#link_id').click(function(){ 
    window.open('url', 'window name', 'window settings'); 
    return false; 
}); 

También podría establecer el target-_blank realidad.

+0

pero este código jQuery no vaya a la diana de forma automática –

+22

_blank es el destino predeterminado, por lo que usar window.open (url) debería ser suficiente – themerlinproject

+0

tema No estoy seguro ayudará y no exactamente iguales pero estaba buscando la misma solución para ** descargar ** un archivo (no de un enlace sino de un botón) y en Chrome la ventana no se abrió y no se descargó hasta que simplemente cambié a window.location = 'url' que doesn no cambie la ubicación pero descargue el archivo ... – gdoumenc

17
+5

¡Yikes! No use o enlace a w3schools, NO está asociado con el W3C. Use MDN en su lugar: https://developer.mozilla.org/en-US/docs/Web/API/Window.open –

+4

w3schools es bueno (ignore los 'pocos' trol w3c) ... seguirá siendo una fuente autorizada ... incluso w3c ahora lo está respaldando de nuevo ;-) – Dawesi

32

es cómo forzar el objetivo dentro de un controlador de clic aquí:

$('a#link_id').click(function() { 
    $(this).attr('target', '_blank'); 
}); 
+5

No es necesario usar el selector jQuery en el manejador de clics para que la línea '$ (this) .attr ('target', '_blank');' pueda cambiarse a 'this .target = "_blank"; 'Además, si los enlaces de anclaje en la página pueden modificarse para tener atributos' rel = "external" ', entonces podría crear un manejador de clics global para la página con el selector jQuery' a [rel = "externo"] 'en lugar de tener un controlador de clic por enlace seleccionado con' a # link_id' – himanshu

+0

Sin embargo, parece que esto no funciona con los enlaces HTTPS. – PKHunter

3

También puede utilizar el jQuery prop() método para esto.

$(function(){ 
    $('yourselector').prop('target', '_blank'); 
}); 
0

Microsoft IE no admite un nombre como segundo argumento.

window.open('url', 'window name', 'window settings'); 

El problema es window name. Esto funcionará:

window.open('url', '', 'window settings') 

Microsoft sólo permite los siguientes argumentos, si se utiliza ese argumento en absoluto:

  • _blank
  • _media
  • _parent
  • _search
  • _self
  • _top

Check this Microsoft site

+3

-1: No obstante, no se cumple con la copia/pega que viola la licencia de http://stackoverflow.com/a/1462500/560648. [El argumento _es_ compatible] (http://msdn.microsoft.com/en-us/library/ms534659%28v=vs.85%29.aspx). Simplemente no puede contener espacios o guiones u otros signos de puntuación. Lea otras respuestas y comentarios sobre esa pregunta. –

0

Tenga en cuenta que si quieres ejecutar AJAX solicita dentro de la función de controlador de eventos para el evento click. Por alguna razón, Chrome (y tal vez otros navegadores) no abrirá una nueva pestaña/ventana.

0

Esto no es una solución muy bonito, pero funciona:

CSS:

.new-tab-opener 
{ 
    display: none; 
} 

HTML:

<a data-href="http://www.google.com/" href="javascript:">Click here</a> 
<form class="new-tab-opener" method="get" target="_blank"></form> 

Javascript:

$('a').on('click', function (e) {  
    var f = $('.new-tab-opener'); 
    f.attr('action', $(this).attr('data-href')); 
    f.submit(); 
}); 

ejemplo vivo: http://jsfiddle.net/7eRLb/

1

Acabo de encontrar una solución interesante a este problema. Estaba creando tramos que contienen información basada en el retorno de un servicio web. Pensé en intentar poner un enlace alrededor del tramo para que, si hacía clic en él, la "a" capturara el clic.

Pero estaba tratando de capturar el clic con el lapso ... así que pensé por qué no hacer esto cuando creé el lapso.

var span = $('<span id="something" data-href="'+url+'" />'); 

luego me ató por controlador de clic al rango de medición, que crea un vínculo basado en el '-href datos' atributo:

span.click(function(e) { 
    e.stopPropagation(); 
    var href = $(this).attr('data-href'); 
    var link = $('<a href="http://' + href + '" />'); 
    link.attr('target', '_blank'); 
    window.open(link.attr('href')); 
}); 

Esto permitió éxito que yo haga clic en un lapso y abrir una nueva ventana con una url adecuada.

1

¿Qué pasa con <a href="myurl.html" target="_blank">My Link</a>? No se necesita Javascript ...

+20

Porque quiero hacerlo en javascript ... – Chris

1

esta solución también consideró el caso de que la url esté vacía y deshabilite (gris) el enlace vacío.

$(function() { 
 
    changeAnchor(); 
 
}); 
 

 
function changeAnchor() { 
 
    $("a[name$='aWebsiteUrl']").each(function() { // you can write your selector here 
 
    $(this).css("background", "none"); 
 
    $(this).css("font-weight", "normal"); 
 

 
    var url = $(this).attr('href').trim(); 
 
    if (url == " " || url == "") { //disable empty link 
 
     $(this).attr("class", "disabled"); 
 
     $(this).attr("href", "javascript:void(0)"); 
 
    } else { 
 
     $(this).attr("target", "_blank");// HERE set the non-empty links, open in new window 
 
    } 
 
    }); 
 
}
a.disabled { 
 
    text-decoration: none; 
 
    pointer-events: none; 
 
    cursor: default; 
 
    color: grey; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
 
<a name="aWebsiteUrl" href="http://www.baidu.com" class='#'>[website]</a> 
 
<a name="aWebsiteUrl" href=" " class='#'>[website]</a> 
 
<a name="aWebsiteUrl" href="http://www.alibaba.com" class='#'>[website]</a> 
 
<a name="aWebsiteUrl" href="http://www.qq.com" class='#'>[website]</a>

Cuestiones relacionadas