2013-08-04 57 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);