2013-06-11 10 views
6

Mam problemy z używaniem mixpanel.track_links z linkami dodanymi dynamicznie (po wczytaniu strony).Mixpanel track_links nie działa z dynamicznie dodanymi elementami

Dla ogólnego przykładu, biorąc pod uwagę tę stronę:

<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> 

W pewnym działania użytkownika, linki są dodawane do strony za pomocą jQuery. Na przykład:

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

Problem polega na tym, że linki track_links nie są uruchamiane po kliknięciu nowo utworzonego łącza. Mam nadzieję, że ktoś może podzielić się swoimi doświadczeniami w zakresie włączania funkcji track_link dla dynamicznie dodawanych linków.

+3

Zespół obsługi Mixpanel track_links potwierdzono, że nie można stosować wygenerowane dynamicznie linki. Zalecają przebudowanie funkcjonalności za pomocą inżynierii wstecznej track_links i track_forms. "Track_links i track_forms to programy do obsługi kliknięć, których podstawową strukturą jest to, że wyłączają zmianę strony, wysyłają żądanie śledzenia, a następnie zmieniają stronę wywołania zwrotnego funkcji track. Jest też limit czasu (300ms), aby ponownie załadować stronę tak, że w rzadkich przypadkach, gdy Mixpanel ma awarię, łącze nadal działa, nawet jeśli nasze serwery są wyłączone. " –

+1

co masz na myśli przez reverse engineering track_links? – Bri6ko

Odpowiedz

7

Byłem ciekawy, więc sprawdziłem ich kod i poszedłem do przodu i zrobiłem tak, jak sugerowali. Testowałem to i działało dobrze. To wymaga jednak jQuery.

Przykład użycia: 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); 
    }); 
}; 
Powiązane problemy