2013-06-11 1 views
6

У меня возникли проблемы с использованием mixpanel.track_links со ссылками, добавленными динамически (после загрузки страницы).Mixpanel track_links не работает с динамически добавленными элементами

Для общего примера, учитывая эту страницу:

<div id="link-div"></div> 
<input type="button" id="add-link" /> 
<script type="text/javascript"> 
mixpanel.track_links(".mixpanel-event", "event name", function(ele) { return { "type": $(ele).attr("type")}}); 
</script> 

В каких-то действиях пользователя, ссылки добавляются на страницу с помощью JQuery. Например:

$('#add-link).click(function() { 
    $('#link-div').html('<a class="mixpanel-event" type="event-type" href="#>Link to track</a>'); 
}) 

Проблема заключается в том, что track_links не запускается при щелчке только что созданной ссылки. Я надеюсь, что кто-то может поделиться своим опытом в том, чтобы включить функцию track_link для динамически добавленных ссылок.

+3

Команда поддержки Mixpanel подтвердил, что track_links не могут быть использованы с динамически генерируемых ссылок. Они рекомендуют восстановить функциональность с помощью обратного проектирования track_links и track_forms. «Track_links и track_forms являются обработчиками кликов, основная их структура заключается в том, что они отключают изменение страницы, отправляют запрос трека, а затем меняют страницу на обратный вызов функции трека. Также существует тайм-аут (300 мс) для перезагрузки страницы так или иначе, так что в редком случае, когда Mixpanel отключился, ссылка все еще работает, даже если наши серверы не работают ». –

+1

Что вы подразумеваете под обратным проектированием track_links? – Bri6ko

ответ

7

Мне было любопытно, поэтому я проверил их код и пошел вперед и сделал, как они и предложили. Я тестировал его, и он работал нормально. Это требует jQuery.

Пример использования: mixpanel.delegate_links(document.body, 'a', 'clicked link');

// with jQuery and mixpanel 
mixpanel.delegate_links = function (parent, selector, event_name, properties) { 
    properties = properties || {}; 
    parent = parent || document.body; 
    parent = $(parent); 

    parent.on('click', selector, function (event) { 
     var new_tab = event.which === 2 || event.metaKey || event.target.target === '_blank'; 

     properties.url = event.target.href; 

     function callback() { 
      if (new_tab) { 
       return; 
      } 

      window.location = properties.url; 
     } 

     if (!new_tab) { 
      event.preventDefault(); 
      setTimeout(callback, 300); 
     } 

     mixpanel.track(event_name, properties, callback); 
    }); 
};