繁体   English   中英

jQuery跟踪器触发两次

[英]jQuery tracker firing twice

我正在使用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(),正如我在本网站上所建议的那样,但是当我这样做时,它会禁用该网站上的data-toggle =“ dropdown”(我正在使用jQuery和Bootstrap),从而使该网站相当无功能。

我需要找到一种方法,使我的Google Analytics(分析)跟踪代码在被点击时仅触发一次,而不会干扰网站上其他对象的提示。

编辑:这是我正在跟踪的典型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 =“ trackingGaEvent()”,直到我找到一种使jQuery工作的方法。 因此,它确实可以直接在HTML中与onClick一起使用。

看到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节点上触发。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM