Jquery: заменить все ссылки в зависимости от значения cookie и заменить истинную ссылку после нажатия - PullRequest
1 голос
/ 02 апреля 2011

У меня есть значение cookie: clickotV

У меня есть несколько href с тем же классом "t":

  • <a href="link1.html" class="t">link1</a>
  • <a href="link2.html" class="t">link2</a>
  • <a href="link2.html" class="t"><img src="image2.jpg" /></a>

Когда значение cookie равно 1:

  • Я должен заменить все href с классом "t" на out.phpи добавить цель _blank Итак, я делаю это:

    $(document).ready(function(){
        if($.cookie('clickotV')==1){
            $("a.t").attr("href", "/out.php");
            $("a.t").attr("target", "_blank");
        }
    });
  • Но я должен заменить источник ссылки (без _blank) после того, как пользователь нажмет на замененную ссылку (out.php)

Как мне?

1 Ответ

0 голосов
/ 02 апреля 2011

Если вам нужно запомнить данные, вам нужно будет их сохранить, к счастью, в jQuery для этого есть команда .data().

Основная проблема, с которой вы столкнетесь - заставить href изменить после щелчка. Вы можете связать событие click, установить короткий тайм-аут, чтобы вернуть значение назад, и отменить привязку события click после действия по умолчанию. Или попробуйте открыть страницу в javascript, но это часто блокируется.

Редактировать: Изменено для сброса всех ссылок при первом нажатии.

$(document).ready(function() {
    if ($.cookie('clickotV') == 1) {
        $('a.t').each(function() {
            var self = $(this);
            self.data('old-href', self.attr('href'))
                .attr({ 'href': '/out.php',
                        'target': '_blank' });

            // Timeout - option 1
            self.click(function() {
                setTimeout(function() {
                    $('a.t').each(function() {
                        $(this).attr('href', $(this).data('old-href')).unbind('click');
                    });
                }, 10);

                // passthrough for default action
                return true;
            });

            // JS new-window - option 2
            self.click(function() {
                var newWindow = window.open(self.attr('href'), '_blank');

                $('a.t').each(function() {
                    $(this).attr('href', $(this).data('old-href')).unbind('click');
                });

                newWindow.focus();
                return false;
            });
        });
    }
});
...