IE中的jQuery ATTR funk

时间:2012-01-05 16:05:26

标签: javascript jquery internet-explorer google-analytics onclick

我正在使用$(document).ready()

动态创建javascript并将其附加到我页面上链接的onclick事件中

我的onclick javascript用于生成我传递给Google Analytics的事件功能,以跟踪我页面上的事件,例如横幅广告和下载的PDF。我在Google Analytics中获取来自除IE之外的所有浏览器的这些事件的统计信息。所以,我在IE中的代码有问题(我在我的页面上搜索并搜索了错误,没有)。

通常情况下,我会做类似$(“a”)的事情。点击......执行操作...但无论出于何种原因,我可以让Google Analytics事件跟踪工作的唯一方法就是设置跟踪事件直接在我的链接上运行。因此,我正在使用以下代码在页面加载后将跟踪事件功能注入链接的onclick ....

// 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不会将我的代码放在onclick上。但我不知道在IE中查看生成的源的好方法。我已经在地址栏中尝试了几个javascript函数来调出生成的源代码,假设它们正常工作,那么我的代码就不会将跟踪事件函数注入到我的链接onclick for IE中。我在Firefox的视图生成源中看到onclick中的跟踪事件功能。

作为另一项测试,您可以看到我在跟踪事件功能周围添加了警报。在FF中,两个警报都触发,在IE中既没有警报触发器。

还有一条信息。我的Google Analytics不会记录任何IE浏览器的事件。据我所知,我的问题不是针对一个版本的IE。

我如何知道我的动态javascript是否进入了IE的onclick,然后我该怎么做才能将它带入IE的onclick?

更新 为简化问题并重点关注答案的方向,我删除了Google Analytics事件功能。现在,我正在做的就是在onlick中注入alert()。 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没有注入IE中的onclick。

在IE中查看生成的源的最可靠方法是什么?

如果我可以确认我的代码没有被注入链接的onclick属性,那么我至少可以回答为什么Google Analytics不跟踪IE的事件。这是因为我注入的代码在IE中不存在。

5 个答案:

答案 0 :(得分:4)

你不应该添加'onclick'attr,而是使用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');
    });
}

上面的内容,抱歉写了这么快,所以可能会有拼写错误。

答案 1 :(得分:0)

很小的机会,但是如果你的页面上有任何VBScript,那么你应该在" javascript:"

之前添加你的onclick字符串

答案 2 :(得分:0)

你可以使用历史悠久的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()方法通常没用,但这是一个完全不同的咆哮。

答案 3 :(得分:0)

要了解跟踪链接的一点是,如果浏览器在提取跟踪像素之前离开页面,则可能无法记录事件,具体取决于浏览器,计算机和&网络速度。我对以下内容运气不错(从@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);
                }
            });
        }
    );

基本上,如果链接没有在新窗口中打开,请等待并自己关注。

答案 4 :(得分:0)

事实证明,我的问题与Google Analytics或其跟踪事件无关。经过大量的测试,我终于确定在IE中,jQuery的$()。attr()无效。

奇怪的是它没有破坏或抛出错误。 IE只是以某种方式忽略它,并且不会将我的动态javascript添加到锚标记的onclick参数。

解决方案...

  1. 显而易见的是像所有人建议的那样绑定事件。如果你可以使用$()。click()那么我同意,永远使用它。永远不要使用$()。attr(“onclick”,“做某事”);

  2. 但是我的项目中的其他情况使我无法使用$()。click()。除非事件跟踪功能内嵌在锚标记上,否则我无法使用事件跟踪功能将统计数据导入Google Analytics。

  3. 去了老学校......

    $(".obj").each
            (
                function (index) {
    
                    this.setAttribute("onclick", "alert('It is Working');");
    
                }
            );
    

    感谢大家的帮助。