跟踪onclick事件

时间:2013-08-04 02:29:48

标签: javascript

我的目标是将特定页面中链接的总点击次数存储到变量中,并在用户退出页面时调用该变量。这是一种正确的做法吗?

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

3 个答案:

答案 0 :(得分:1)

您的代码因多种原因无效:

  • 您绑定clicks()函数中的点击处理程序,并且在页面卸载之前不要调用clicks(),此时处理任何点击都为时已晚。您需要在页面加载时绑定单击处理程序。
  • 您无法在元素的列表上设置.onclick,这就是getLinks变量的设置,它被设置为getElementsByTagName()的结果(获取元素不是元素)。
  • 您将未声明的变量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/

答案 1 :(得分:0)

您可以使用sessionStoragelocalStorage

if(typeof(Storage)!=="undefined")
{
   // store the clicks here
   sessionStorage.numClicks = value;
}

并在此处详细了解这两个:http://www.w3schools.com/html/html5_webstorage.asp

答案 2 :(得分:0)

绑定全局事件侦听器,并将计数存储为sessionStorage

var clicks = 0;

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