2015-12-14 3 views
1

Я использую JQuery для отслеживания GA события с кодом, в основном это позволяет программистам построить GA настроенное событие GA через основные «блоки» (как положение и т.д.)JQuery трекер стрелять дважды

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(), как я видел на этом сайте, но когда я это делаю, он отключает мои данные-toggle = "dropdown" (я использую jQuery & Bootstrap) на сайте, делая сайт скорее нефункционально.

Мне нужно найти способ сделать мой код отслеживания GA только один раз, когда вы нажмете, не нарушая сопоставление других объектов на веб-сайте.

EDIT: Вот типичный 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. Поэтому он работает с onClick непосредственно в HTML.

ответ

0

Вы можете использовать .one, чтобы зарегистрировать событие вместо .on, чтобы обработчик был только один раз.

+1

Но если пользователь нажимает что-то дважды (или сто раз), его будет отслеживать только один раз. * –

+1

@jeff_mcmahan true, я неправильно понял «Мне нужно найти способ сделать мой код отслеживания GA только один раз при нажатии « – Vier

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.

+0

Спасибо за ваш ответ. Я попробовал ваше предложение, но он не сработал, он все еще стреляет дважды. Я также пытался использовать .one вместо .on, но та же проблема возникает. Что касается HTML, ну, веб-сайт NSFW, поэтому я не могу опубликовать ссылку здесь, к сожалению. – Dacramash

+0

Если вы 'console.log ($ ('. GaTracking'). Length)', вы получаете номер, который вы ожидаете? –

+0

Да, но он отображается дважды – Dacramash

Смежные вопросы