如何通过我的网站用javascript查找用户点击3次

时间:2008-12-19 22:10:36

标签: javascript javascript-events click

在JavaScript中有什么方法可以找出通过同一个域点击2次或更多次的用户?

我需要在用户点击网站上的任意位置3次后弹出一个窗口。我知道如何点击一下 - document.referreraddEventListener,但我失败了。 我需要能够捕获所有点击事件(不仅仅是链接)并计算它们的东西。

非常感谢

3 个答案:

答案 0 :(得分:2)

不确定。您需要在cookie或服务器端数据存储中存储用户单击事件的列表。在每次录制的点击中,将计数增加1,并在数字达到3时执行操作。

尝试使用会话cookie在页面之间存储状态 - 它们速度快,相当广泛兼容,并且在浏览器关闭时会将其清零,以防止向用户的cookie罐发送垃圾邮件。

答案 1 :(得分:1)

我试过这个并且工作正常:

window.onload = function() {
    var clicked = readCookie('popunder');
    if(clicked == null) {
        clicked = 0;
    }

    var allLinks = document.getElementsByTagName("a");
    for(i=0;i<=allLinks.length;i++) {
        allLinks[i].addEventListener("click",countClicks,true);
    }

    function countClicks() {           
        if(clicked == 2) {
            popunder(); //something to do
        } else {
            clicked++;
            doCookie('popunder', clicked, 1);
            alert(clicked);
        }
    }

    function popunder() { alert('thats 3 clicks!'); }

    function doCookie(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        } else {
            var expires = "";
        }
        document.cookie = name+"="+value+expires+"; path=/";
    }

    function readCookie(name) {
        var readName = name + "=";
        var cSplit = document.cookie.split(';');
        for(var i=0;i < cSplit.length;i++) {
            var sc = cSplit[i];
            while (sc.charAt(0)==' ') sc = sc.substring(1,sc.length);
            if (sc.indexOf(readName) == 0) return sc.substring(readName.length,sc.length);
        }
        return null;
    }
}

答案 2 :(得分:0)

感谢您的所有建议。 我试过这段代码。但刷新后,点击的变量再次变为0。 我需要将点击的每个新值保存到Cookie(或其他任何内容)中,因此每次点击页面链接时其数量都会增加。 是否可以通过这种方式更改cookie中变量的值?

  

window.onload = function(){

var **allLinks** = document.getElementsByTagName("a");

var **clicked** = 0;

**doCookie**('popunder',clicked,1);

for(i=0;i<=allLinks.length;i++){
    allLinks[i].addEventListener("click",countClicks,true);
}

function **countClicks**(){           
        if(clicked == 3){
            popunder(); //something to do
        }
        else{
            alert(readCookie('popunder'));
            return clicked++;
        }
}

function **doCookie**(name,value,days) {
if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function **readCookie**(name) {
    var readName = name + "=";
    var cSplit = document.cookie.split(';');
    for(var i=0;i < cSplit.length;i++) {
        var sc = cSplit[i];
        while (sc.charAt(0)==' ') sc = sc.substring(1,sc.length);
        if (sc.indexOf(readName) == 0) return sc.substring(readName.length,sc.length);
    }
        return null;
}