jQuery跟踪器两次射击

时间:2015-12-14 15:29:19

标签: javascript jquery twitter-bootstrap google-analytics

我使用jQuery通过以下代码跟踪GA事件,基本上它允许程序员通过基本"块"来构建GA自定义GA事件。 (比如职位等。)

function trackingGaEvent(page, position, object, type, genContent, list) {
    var genContent = genContent || 'Click',
        eventAction = genContent,
        eventLabel = type + " - " + position + " " + object;

    if (list) {
        eventAction = type;
        eventLabel = genContent + " - " + position + " " + object;
    }
    console.log(page, eventAction, eventLabel);
}
$(document).ready(function(){
    $(document).on('click', '.gaTracking', function() {
        trackingGaEvent($(this).data('page'),
            $(this).data('position'),
            $(this).data('object'),
            $(this).data('type'),
            $(this).data('gencontent'),
            $(this).data('list'));
    });
});

然而,我的问题是它总是两次启动代码。我已经尝试添加一个.unbind(),正如我在网站上看到的那样,但是当我这样做时,它会禁用我的数据切换="下拉" (我在网站上使用jQuery和Bootstrap),使网站无法正常运行。

我需要找到一种方法,使我的GA跟踪代码在点击时只触发一次,而不会干扰网站上的其他对象组合。

编辑:这是我正在跟踪的典型HTML对象:

<a href="#" class="btn btn-dark gaTracking" data-page="pgHomepage" data-position="Recent Videos" data-object="Button" data-type="More Videos" title="View videos list ordered by release date">+ More videos/a>

EDIT2:目前,我正在使用onclick =&#34; trackingGaEvent()&#34;直接在锚标记中,直到我找到一种方法来使jQuery方式工作。因此它可以直接在HTML中使用onClick。

2 个答案:

答案 0 :(得分:1)

看到HTML真的很有帮助,但是没有看到它,我猜你的事件正在通过两个 .gaTracking节点传播,导致jQuery看到两个触发适当类的节点。也许试一试:

$(document).ready(function(){
    $('.gaTracking').on('click', function(evt) {
        evt.stopPropagation();
        trackingGaEvent(
            $(this).data('page'),
            $(this).data('position'),
            $(this).data('object'),
            $(this).data('type'),
            $(this).data('gencontent'),
            $(this).data('list'));
    });
});

请注意,我们现在正在监听单个.gaTracking节点,而不是文档。这意味着我们可以阻止事件传播到根,从而阻止它在父.gaTracking节点上触发。

答案 1 :(得分:0)

您可以使用.one来注册事件而不是.on,因此处理程序只会被触发一次。