2013-08-04 168 views
0

我的目標是將某個頁面中鏈接的點擊總量存儲到變量中,並在用戶退出該頁面時調用該變量。這會是一個正確的方式嗎?跟蹤onclick事件

window.onunload = function(){ 
    alert("Total Links Clicked:" + clicks();); 
} 

var clicks = function(){ 
    var clickArray = []; 
    var getLinks = document.getElementsByTagName(A); 

    var clickValue = getLinks.onclick = function() { 
    clickArray.push("1"); 
    } 

    var totalClicks = clickArray.length; 

    return totalClicks; 
} 
+0

是鏈接所有內部鏈接,即在同一頁上的書籤。 – Dancrumb

+0

不,有些不是。 – Ktown

回答

1

您的代碼將不會有幾個原因的工作:

  • 您綁定的點擊處理程序clicks()功能,不叫clicks()直到頁面被卸載,此時處理任何點擊都爲時已晚。您需要在頁面加載時綁定點擊處理程序。
  • 不能元素列表,這是你的getLinks變量都被賦予它被設置爲getElementsByTagName()結果(得到的元素沒有得到元素)上設置.onclick
  • 您將未聲明的變量A更改爲getElementsByTagName();你應該通過字符串"a"
  • alert()的結尾)內有分號,這是一個語法錯誤。

你可以嘗試這樣的事:

window.onload = function() { 
    var clicks = 0; 

    window.onunload = function(){ 
     alert("Total Links Clicked:" + clicks); 
    } 

    function clicked() { 
     clicks++; 
    } 

    var getLinks = document.getElementsByTagName("a");  
    for (var i = 0; i < getLinks.length; i++) 
     getLinks[i].onclick = clicked; 
}; 

注意,瀏覽器可以卸載事件中阻止了alert(),但如果你使用console.log(),而不是你可以看到,clicks有正確的價值。

還要注意,點擊到其他頁面的鏈接當然會導致卸載,所以如果您在當前頁面中有鏈接,點擊數量將只會超過1。

演示:http://jsfiddle.net/A3bkT/1/

0

綁定一個全球性的事件監聽器,只是將計與sessionStorage

var clicks = 0; 

document.addEventListener('click', function(event) { 
    if (event.target.nodeName == 'A') { 
     window.sessionStorage.setItem('clicks', ++clicks); 
    } 
}, false);