2013-06-11 21 views
6

Tôi gặp sự cố khi sử dụng mixpanel.track_links với các liên kết được thêm động (sau khi tải trang).Mixpanel track_links không hoạt động với các yếu tố được thêm động

Đối với một ví dụ tổng quát, được đưa ra trang này:

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

Tại một số hành động của người dùng, liên kết được thêm vào trang sử dụng jquery. Ví dụ:

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

Vấn đề là track_links không được kích hoạt khi nhấp vào liên kết mới được tạo. Tôi hy vọng một người nào đó có thể chia sẻ kinh nghiệm của họ trong việc cho phép chức năng track_link hoạt động với các liên kết được thêm động.

+3

Nhóm hỗ trợ Mixpanel khẳng định rằng track_links không thể được sử dụng với các liên kết tạo động. Họ khuyên bạn nên xây dựng lại các chức năng của track_links kỹ thuật đảo ngược, và track_forms. "Track_links và track_forms là trình xử lý nhấp chuột; cấu trúc cơ bản của chúng là chúng vô hiệu hóa thay đổi trang, gửi yêu cầu theo dõi, sau đó thay đổi trang trên hàm gọi lại của hàm theo dõi. Ngoài ra còn có thời gian chờ (300ms) để tải lại trang dù sao, vì vậy trong trường hợp hiếm hoi mà Mixpanel bị cúp, liên kết vẫn hoạt động ngay cả khi máy chủ của chúng tôi ngừng hoạt động. " –

+1

bạn có ý nghĩa gì khi thiết kế ngược track_links? – Bri6ko

Trả lời

7

Tôi đã tò mò nên tôi đã kiểm tra mã của họ và tiếp tục và làm như họ đã đề xuất. Tôi đã thử nghiệm nó, và nó hoạt động tốt. Điều này đòi hỏi jQuery mặc dù.

sử dụng Ví dụ: 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); 
    }); 
}; 
Các vấn đề liên quan