Javascript函数作为变量

时间:2013-08-11 19:10:54

标签: javascript google-analytics settimeout google-tag-manager

我是一名数字分析师,正在尝试学习Javascript,尤其是当我们的组织现在使用Google跟踪代码管理器时。

今天早上,我的网站设置为跟踪某些出站链接(点击应用商店)作为事件。自定义HTML是:

  <script type="text/javascript"> 

$(document).ready(function(){ 

    $('.app-cta a').click(function(){ 
        dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
    }); 

});

</script>

但是有一个问题(显然很常见)当个人点击退出链接时,浏览器会在Javascript有时间将参数传递给Google Analytics之前点击新网站。建议的解决方法是增加500毫秒的延迟:

<script type="text/javascript"> 

setTimeout(function(){
$(document).ready(function(){ 

    $('.app-cta a').click(function(){ 
        dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
    }); 

});
},500);

</script>

这让我觉得很棒,因为这是我第二次或第三次使用Javascript。

然后我想要更大胆一点。我想让代码“整洁”并尝试从分析函数中创建变量,然后针对该变量运行setTimeout方法。这就是我试过的:

<script type="text/javascript"> 

setTimeout(function(){track_app},500);


var track_app = $(document).ready(function(){ 

    $('.app-cta a').click(function(){ 
        dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
    }); 

});


</script>

我意识到这必须显得非常基本但如果有人能指出为什么最后一次尝试不起作用,我将不胜感激?我最初的尝试(那是有效的,我可以很容易地恢复)是向分析功能添加500毫秒延迟的“最佳”方式吗?集成setTimout方法的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

你几乎做到了; track_app必须是一个完整的函数,而不仅仅是函数体

var track_app = function () {
        $(document).ready(function () {
            $('.app-cta a').click(function () { 
                dataLayer.push({'event': 'GAevent', 'eventCategory': 'App', 'eventAction': 'Click to App Store', 'eventLabel': 'iOS'});
            });
        });
    };

setTimeout(track_app, 500);

答案 1 :(得分:1)

你基本上是在执行track_app的函数上设置超时,即.ready()函数的返回值(不管是什么),而不是函数本身。

这就是为什么你的代码的第二次迭代行为不像第一次。您可以将其更改为:

setTimeout(track_app,500);

var track_app = function () {
    $(document).ready(function(){ 
        $('.app-cta a').click(function(){ 
            dataLayer.push({ 'event':'GAevent', 'eventCategory':'App', 'eventAction':'Click to App Store', 'eventLabel':'iOS' }) 
        }); 
    });
});
编辑:保罗打败了我!

答案 2 :(得分:0)

$('.app-cta a').on('click', function (event) {
    event.preventDefault();

    //do your Google Analytics stuff here

    var href = $(this).closest('a').attr('href');
    setTimeout(function () {
        window.location = href;
    }, 500);
});

以上是我的首要问题,但我们的想法是,当有人点击链接时,您会停止浏览器自然地跟踪链接(即preventDefault方法调用)。一旦您停止浏览器关注链接,您就可以执行GA内容,然后设置超时以将浏览器导航到链接的href属性。

我不太了解GA,但如果那里没有处理这种情况的东西我就不会感到惊讶 - 即浏览器在JS可以执行之前跟随链接。