2010-05-13 3 views

Répondre

185

Vous pouvez aimer:

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

jQuery:

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

Vous pouvez également définir le target-_blank réellement.

+0

mais ce code jquery ne sera pas naviguer vers la cible automatiquement –

+22

_blank est la cible par défaut, donc en utilisant window.open (url) devrait suffire – themerlinproject

+0

Je ne sais pas vous aidera et pas exactement le même problème mais je cherchais la même solution pour ** télécharger ** un fichier (pas à partir d'un lien mais un bouton) et sur Chrome la fenêtre n'a pas ouvert et aucun téléchargement jusqu'à ce que je change simplement à window.location = 'url' qui doesn ne changez pas de lieu mais téléchargez le fichier ... – gdoumenc

17
+5

Yikes! Ne pas utiliser ou lier à w3schools, ce n'est pas associé avec le W3C. Utilisez MDN à la place: https://developer.mozilla.org/fr-fr/docs/Web/API/Window.open –

+4

w3schools est bon (ignorez les quelques trolls w3c) ... continuera à être une source d'autorité ... même w3c le sauvegarde maintenant ;-) – Dawesi

32

Voici comment forcer la cible à l'intérieur d'un gestionnaire de clic:

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

Pas besoin d'utiliser jQuery selector dans le gestionnaire de click donc la ligne '$ (this) .attr ('target', '_blank');' pourrait être changé en 'this .target = "_blank"; 'De plus, si les liens d'ancrage sur la page peuvent être modifiés pour avoir des attributs' rel = "external" ', vous pouvez créer un gestionnaire de clic global pour la page avec le sélecteur jQuery' a [rel = "external"] 'plutôt que d'avoir un gestionnaire de click par lien sélectionné avec un # link_id' – himanshu

+0

Cela ne semble pas fonctionner avec les liens HTTPS? – PKHunter

3

Vous pouvez également utiliser la jquery Prop() méthode pour cela.

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

Microsoft IE ne prend pas en charge un nom en tant que second argument.

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

Le problème est window name. Cela fonctionne:

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

Microsoft ne permet que les arguments suivants, si vous utilisez cet argument du tout:

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

Check this Microsoft site

+3

-1: Nonobstant le fait que votre copie/collage ne respecte pas la licence de http://stackoverflow.com/a/1462500/560648, ce n'est pas vrai. [L'argument _is_ est pris en charge] (http://msdn.microsoft.com/en-us/library/ms534659%28v=vs.85%29.aspx). Il ne peut pas contenir d'espaces ou de tirets ou d'autres signes de ponctuation. Lisez d'autres réponses et commentaires sur cette question. –

0

Soyez conscient que si vous voulez exécuter des requêtes AJAX dans la fonction de gestionnaire d'événements pour l'événement click. Pour une raison quelconque, Chrome (et peut-être d'autres navigateurs) n'ouvrira pas un nouvel onglet/fenêtre.

0

Ce n'est pas une très belle solution, mais cela fonctionne:

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(); 
}); 

Un exemple concret: http://jsfiddle.net/7eRLb/

1

Je viens de trouver une solution intéressante à ce problème. Je créais des intervalles qui contiennent des informations basées sur le retour d'un service Web. J'ai pensé à essayer de mettre un lien autour de la portée de sorte que si je cliquais dessus, le "a" capturerait le clic.

Mais j'essayais de capturer le clic avec la durée ... alors j'ai pensé pourquoi ne pas le faire quand j'ai créé la durée.

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

Je lié alors un gestionnaire de clic pour la durée qui a créé un lien basé sur les «données href attribut:

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')); 
}); 

Cela m'a permis avec succès de cliquer sur une période et ouvrir une nouvelle fenêtre avec une URL correcte.

1

Qu'est-ce qui ne va pas avec <a href="myurl.html" target="_blank">My Link</a>? Aucun Javascript nécessaire ...

+20

Parce que je veux le faire en javascript ... – Chris

1

cette solution a également considéré le cas où l'URL est vide et a désactivé (en gris) le lien vide.

$(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>

Questions connexes