Onclick не стреляет для загрузки - PullRequest
0 голосов
/ 24 июня 2010

У меня проблемы с событием onclick для загрузки. Не хочет стрелять, когда я нажимаю на ссылку. Это просто продолжается как обычно. Но это работает с внешней ссылкой. Я сделал что-то явно не так?

<a href="http://www.wildlifetrusts.org/" target="_blank" onclick="trackExternalLink(this, '/links-the_royal_society_of_wildlife_trusts');">Royal Society of Wildlife Trusts.</a>
<a href="/c2/uploads/our strategy for 2010_15.pdf" target="_blank" onclick="trackExternalLink(this, '/downloads-our_strategy_for_2010-15');">2010-2015 strategy,</a>

То же самое происходит в FF, Chrome и IE 8.

function trackExternalLink(link, action) {
_gaq.push(['_trackPageview', action]);
setTimeout('document.location = "' + link.href + '"', 25000)
return false;
}

Ответы [ 2 ]

0 голосов
/ 24 июня 2010

Вы не возвращаете false из вашего обработчика onclick.Вы возвращаете false из функции, которую она вызывает, но затем отбрасываете это в обработчике.Вы имели в виду:

onclick="return trackExternalLink(this, '/links-the_royal_society_of_wildlife_trusts');"

Однако все эти вещи onclick довольно уродливы.Рассмотрим ненавязчивый сценарий.И потерять неприятный вызов setTimeout создания сценария из строки.Google действительно рекомендует этот код?Это своего рода отстой.

Вот версия быстрого взлома, которая оборачивает действие в имя класса:

<a href="http://www.wildlifetrusts.org/" class="ping-links-the_royal_society_of_wildlife_trusts">Royal Society of Wildlife Trusts.</a>

<script type="text/javascript">
    for (var i= document.links.length; i-->0;)
        if (document.links[i].className.substring(0, 5)==='ping-')
            document.links[i].onclick= pingclick;

    function pingclick() {
        var action= this.className.substring(5);
        var href= this.href;

        _gaq.push(['_trackPageview', action]);
        setTimeout(function() {
            location.href= href;
        }, 25000);

        return false;
    }
</script>

Это все еще не здорово.25 секунд (25000), очевидно, way слишком длинная задержка;Вы, вероятно, хотите снизить это до 200ish.На самом деле он должен следовать по ссылке, как только XMLHttpRequest, который передает информацию на сервер, будет завершен, а не использовать произвольную задержку, но Google, похоже, не дает вам такой возможности.Как бедно.С другой стороны, сценарии pingback для отслеживания ссылок в любом случае являются неприятным, враждебным для пользователя действием.

0 голосов
/ 24 июня 2010

Я полагаю, что вам нужно вернуть false, чтобы не дать клику функционировать как обычно, однако это может быть связано с jQuery.

Я бы также рекомендовал использовать инфраструктуру, а не атрибуты onclick, они грязныеи структура также будет полезна в других отношениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...