JQuery ATTR фанк в IE - PullRequest
       19

JQuery ATTR фанк в IE

3 голосов
/ 05 января 2012

Я динамически создаю JavaScript и присоединяю его к событию onclick ссылок на моей странице, используя $ (document) .ready ()

Мой JavaScript-код onclick используется для генерации функций событий, которые я передаю в Google.Аналитика для отслеживания событий на моей странице, таких как клики по баннерам и загруженные PDF-файлы.Я получаю статистику в Google Analytics для этих событий из всех браузеров, кроме IE.Итак, что-то не так с моим кодом в IE (я искал и искал ошибки на своей странице, их нет).

Обычно я просто делал бы что-то вроде $ ("a"). Click ..... делать что-то ... но по какой-то причине единственный способ, с помощью которого я мог настроить отслеживание событий в Google Analytics, - это добавить функцию отслеживания событий непосредственно в мои ссылки.Поэтому я использую следующий код для добавления функции отслеживания событий в клик моей ссылки после загрузки страницы ....

// Tracks favorites on the home page.
    $("._gatHomePageFavorites").each
    (
        function(index)
        {
            var description = "Content ID: " + getParameterNamedID($(this).attr("href")) + " - " + $(this).children().first().attr("alt");
            $(this).attr("onclick","alert('1');_gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click','" + _gatCleanString(description) + "']);alert('2');");
        }
    );

Я думаю, что моя проблема в том, что IE не помещает мой код в клик,Но я не знаю хорошего способа просмотра сгенерированного источника в IE.Я попробовал несколько функций javascript в адресной строке, чтобы вызвать сгенерированный источник, при условии, что они работают, и тогда мой код не внедряет функцию отслеживания событий в щелчок моей ссылки для IE.Я вижу функцию отслеживания событий в щелчке в сгенерированном источнике просмотра Firefox.

В качестве еще одного теста вы можете видеть, что я добавил предупреждения вокруг своей функции отслеживания событий.В FF оба оповещения срабатывают, В IE не срабатывают ни одно оповещение.

Еще одна часть информации.Моя Google Analytics не записывает события для любого браузера IE.Насколько я могу судить, моя проблема не относится только к одной версии IE.

Как я могу определить, попадает ли мой динамический javascript в onclick для IE, и что я могу сделать, чтобы получить его вщелчок для IE?

ОБНОВЛЕНИЕ Чтобы упростить проблему и сфокусировать направление ответов, я удалил функцию события Google Analytics.Теперь все, что я делаю, это добавляю alert () в onlick.IE даже не вызовет предупреждение ().Я попробовал следующее ...

// Tracks favorites on the home page.
    $("._gatHomePageFavorites").each
    (
        function(index)
        {
            $(this).attr("onclick","alert('1')");
        }
    );

и

// Tracks favorites on the home page.
    $("._gatHomePageFavorites").each
    (
        function(index)
        {
                $(this).attr("onclick","setTimeout(\"alert('1')\", 1000);return false");
        }
    );

Так что я все еще склоняюсь к тому, что мой JavaScript не вводится в onclick в IE.

Какой самый надежный способ просмотра сгенерированного источника в IE?

Если я могу подтвердить, что мой код не вставляется в атрибут onclick ссылки, тогда я могухотя бы ответ на вопрос, почему Google Analytics не отслеживает события для IE.Это было бы потому, что мой введенный код не существует в IE.

Ответы [ 5 ]

4 голосов
/ 05 января 2012

Вы не должны добавлять атрибут 'onclick', а использовать его, используя событие jQuery .click().

function(index){
    var description = "Content ID: " + getParameterNamedID($(this).attr("href")) + " - " + $(this).children().first().attr("alt");
    $(this).click(function() {
        alert('1');
        _gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click',  _gatCleanString(description)]);
        alert('2');
    });
}

что-то вроде выше, извините написал это быстро, поэтому может иметь опечатку.

0 голосов
/ 06 января 2012

Оказывается, моя проблема не имела никакого отношения к Google Analytics или ее отслеживанию событий.После долгих испытаний я окончательно определил, что в IE не работает $ (). Attr () jQuery.

Странно то, что он не ломается и не выдает ошибку.IE просто проигнорировал это как-то и не добавил бы мой динамический javascript к параметру onclick тега привязки.

Решения ...

  1. Очевидным является привязка ксобытие, как все предложили.Если вы можете использовать $ (). Click (), тогда я согласен, используйте его всегда.Никогда не используйте $ (). Attr ("onclick", "сделать что-то");

  2. Однако другие обстоятельства в моем проекте не позволили мне использовать $ (). Click ().Мне не удалось получить статистику в Google Analytics с помощью функции отслеживания событий, если только функция отслеживания событий не была встроена в тег привязки.

Ушел из старой школы ...

$(".obj").each
        (
            function (index) {

                this.setAttribute("onclick", "alert('It is Working');");

            }
        );

Спасибо всем за помощь.

0 голосов
/ 06 января 2012

Что нужно знать о ссылках отслеживания, так это то, что если браузер покидает страницу до получения пикселя отслеживания, событие может не записываться, в зависимости от браузера, компьютера и скорости сети.Мне повезло со следующим (изменено с @Tim Down's кода):

$("._gatHomePageFavorites").each
    (
        function(index)
        {
            var $this = $(this);
            var description = "Content ID: "
                + getParameterNamedID($this.attr("href")) + " - "
                + $this.children().first().attr("alt");
            $this.click(function(e) {
                alert('1');
                _gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click',
                    _gatCleanString(description)]);
                if ($this.attr('target') != '_blank') {
                    e.preventDefault();
                    setTimeout('document.location = "' + $this.attr('href') + '"', 150);
                }
            });
        }
    );

По сути, если ссылка не открывается в новом окне, подождите и следуйте ей сами.

0 голосов
/ 05 января 2012

Вы можете просто использовать проверенное временем свойство DOM0 onclick, хотя на самом деле нет веской причины, по которой метод jQuery click() не будет работать.

$("._gatHomePageFavorites").each
    (
        function(index)
        {
            var $this = $(this);
            var description = "Content ID: "
                + getParameterNamedID($this.attr("href")) + " - "
                + $this.children().first().attr("alt");

            this.onclick = function() {
                alert('1');
                _gaq.push(['_trackEvent', 'Favorites - Home Page', 'Icon Click',
                    _gatCleanString(description)]);
                alert('2');
            };
        }
    );

Метод jQuery attr(), как правило, бесполезен, но это совсем другая напыщенная речь.

0 голосов
/ 05 января 2012

Небольшой шанс, но если у вас есть какой-либо VBScript на вашей странице, то вы должны добавить в строку ввода "javascript:"

...