Открытие ссылок в нескольких окнах/вкладках браузера

У меня есть требование щелкнуть несколько ссылок (выбрав их), а затем нажать кнопку, которая откроет все выбранные ссылки в новых окнах или вкладках. Это, конечно, будет зависеть от поведения браузера.

Мой план состоит в том, чтобы использовать Javascript для добавления выбранных ссылок в массив, а затем, нажав кнопку отправки, javascript будет проходить через массив и открывать новое окно для каждого элемента. Я, вероятно, сделаю это в jQuery.

Кто-нибудь делал что-то подобное? Есть ли альтернативы?


person Mindblip    schedule 15.11.2009    source источник


Ответы (2)


Я думаю, вы правы.

Лучший способ добиться того, что вы описываете IMHO, - это поместить URL-адреса ссылок, которые вы хотите открыть в новых окнах, в массив, используя return false;, чтобы предотвратить фактическое открытие ссылки, а затем использовать какой-то цикл, чтобы открыть все из них.

Я позволил себе собрать несколько строк кода jQuery, которые будут делать то, что вы описали:

$(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 будет выглядеть примерно так:

<!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>
person Krule    schedule 15.11.2009
comment
В разделе «иначе, если» функции щелчка вы не установили значение пакета данных обратно в «истина». - person SimonDever; 16.11.2009
comment
++ Хорошо, я собирался ответить в HTML-коде, но вы меня опередили. - person Secko; 16.11.2009

Я считаю, что самый простой способ — использовать атрибут target="_blank" тега привязки. Создайте коллекцию из <a> элементов и .click через нее.

Теоретически вы можете использовать window.open, но этот метод откроет НОВОЕ окно, а не новую вкладку, как вы хотите.

person user211416    schedule 15.11.2009