2009-11-15 8 views
0

J'ai besoin de cliquer sur plusieurs liens (en les sélectionnant), puis de cliquer sur un bouton qui ouvrira tous les liens sélectionnés dans de nouvelles fenêtres ou onglets. Cela dépendra bien sûr du comportement du navigateur. Mon plan est d'utiliser Javascript pour ajouter les liens sélectionnés à un tableau, puis en cliquant sur le bouton soumettre, le javascript parcourra le tableau et ouvrira une nouvelle fenêtre pour chaque élément. Je vais probablement le faire en jQuery.Ouvrir les liens dans plusieurs fenêtres/onglets du navigateur

Est-ce que quelqu'un a fait quelque chose de similaire? Existe-il des alternatives?

Répondre

2

Je pense que vous avez raison. La meilleure façon de réaliser ce que vous décrivez IMHO est de placer les URL des liens que vous voulez ouvrir dans de nouvelles fenêtres dans un tableau, en utilisant return false; afin d'empêcher l'ouverture du lien, puis d'utiliser une sorte de boucle pour ouvrir tous.

J'ai pris la liberté de mettre ensemble quelques lignes de code jQuery qui fera ce que vous avez décrit:

$(document).ready(function() { 
    var $hash = new Array(); // We create new Array 
    $('a').click(function(){ // On each click to <a> element 
     if ($(this).attr("data-pack") == "true") { // check wether this is one of the links we use 
      $hash[$(this).attr("id")] = $(this).attr("href"); // We add href value into $hash object 
      $(this).css("color","green"); // Way to mark selected ones 
      $(this).attr("data-pack", "selected"); // Change data-pack property value to selected 
      return false; // We don't want to execute this yet 
     } else if ($(this).attr("data-pack") == "selected") { // In case you change your mind and want to unselect 
      $(this).attr("data-pack", "true"); // Change data-pack property back, thanks to Ambrosia pointing it out in the comment 
      $(this).css("color","red"); // We mark it as unset 
      delete $hash[$(this).attr("id")]; // Remove it from hash 
      return false; 
     } 
    }); 

    $("form").submit(function(){ // After we submit 
     for (var i in $hash) { // Go trough $hash 
      window.open($hash[i]); // And open window for each member 
     } 
     return false; // We don't actually want to submit form, just open new windows :) 
    });  
}); 

HTML ressemblerait à quelque chose comme:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Page Title</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript" charset="utf-8" async defer></script> 
    <script src="application.js" type="text/javascript" charset="utf-8" async defer></script> 
</head> 
<body> 
    <a href="#link1" data-pack="true" id="link1">data</a> 
    <a href="#link2" data-pack="true" id="link2">data</a> 
    <a href="#link3" data-pack="true" id="link3">data</a> 
    <a href="#link4" data-pack="true" id="link4">data</a> 
    <a href="#">ordinary link</a> 

    <form>   
     <input type="submit" value="submit"> 
    </form> 
</body> 
</html> 
+1

Dans le « autre si » section de la fonction de clic, vous n'avez pas redéfini la valeur du paquet de données sur 'true'. – SimonDever

+0

Vous avez raison, je vais corriger cela. Je vous remercie. – Krule

+0

++ Sympa, j'étais sur le point de répondre en code HTML mais tu m'as battu dessus. – Secko

0

Je crois que la façon la plus simple est d'utiliser l'attribut target="_blank" de l'étiquette d'ancrage. Créez une collection d'éléments <a> et .click à travers.

En théorie, vous pouvez utiliser window.open mais cette méthode ouvre une nouvelle fenêtre et non une nouvelle TAB comme vous le souhaitez.

Questions connexes