0

该脚本应该计算 cookie 设置的次数,并在计数为 1 或 2 时执行特定操作。由于某种原因,它与开关中的 1 不匹配。我尝试将其作为字符串“1”进行,并尝试以多种不同的方式重写它。似乎没有什么可以匹配。

<HTML>
    <HEAD>
        <TITLE>Hello World</TITLE>
    </HEAD>
    <BODY>
        <SCRIPT type="text/javascript">


function SetCookie(name, value, time)
{
    var expires = new Date();    expires.setTime( expires.getTime() + time );    document.cookie = name + '=' + value + '; expires=' + expires.toGMTString() + '; path=/';
}

function GetCookie(name)
{

    var cookies = document.cookie.toString().split('; ');
    var cookie, c_name, c_value;

    for (var n=0; n<cookies.length; n++)
    {
        cookie  = cookies[n].split('='); c_name  = cookie[0]; c_value = cookie[1];

        if ( c_name == name )
        { return c_value; }
    }
    return null;
}

function CheckTarget(e)
{
    var cookieValue = GetCookie('vrOp');    

    if (cookieValue === null) {
                var cookieOp = 1;
                SetCookie('vrOp',  cookieOp, 5*24*60*60*1000);
    }
    else {

    switch(cookieValue)
        {           
            case 1:
                var cookieOp = cookieValue + 1;
                alert(cookieOp);
                SetCookie('vrOp', cookieOp, 5*24*60*60*1000);
                break;
            case 2:
                var cookieOp = cookieValue + 1;

                SetCookie('vrOp', cookieOp, 5*24*60*60*1000);
                break;
        }

    }
}


function InitVr()
{
    if ( document.attachEvent )
    {
        document.attachEvent( 'onclick', CheckTarget );
    }
    else if ( document.addEventListener )
    {
        document.addEventListener( 'click', CheckTarget, false );
    }
}

InitVr();

        </SCRIPT>
        <script type="text/javascript">

        </script>
    </BODY>
</HTML>

如果它确实有效,您应该不会在第一次单击时从脚本中得到任何反应,因为 cookieValue 为 === null,除了它将 cookie 值设置为 1。在第二次单击时,它应该提醒您 cookie 值现在将变为是 2。第三次单击不会再次发出警报,但是当设置为 3 时的值。就好像开关甚至没有运行一样。

4

1 回答 1

1

我测试了您的代码,并使用了大量的警报,发现这cookieValue确实是一个字符串。我猜测为什么当您更改开关以查找字符串时它似乎不起作用是因为它已被设置为您的开关不查找的值。

因此,就您的代码而言,事件的顺序如下:

  • cookie 在第一次点击时为空(假设是新环境)。然后将其设置为字符串“1”
  • 在第二次单击时,输入了 switch 语句,但没有匹配的值,因此没有任何反应
  • 之后的所有点击都和上面一样

  • 现在,如果您更改开关以检查字符串,在第一种情况下,您希望cookieOp设置值为 2,而是将 1 连接到其值,从而设置为值“11”。

    解决这个问题实际上很简单。您只需要确保您正在处理的变量是一个数字,而不是一个字符串。

    if (cookieValue === null) {
        var cookieOp = 1;
        SetCookie('vrOp',  cookieOp, 5*24*60*60*1000);
    } else {
        cookieValue = parseInt(cookieValue, 10);
        switch(cookieValue)
        {           
            case 1:
                var cookieOp = cookieValue + 1;
                ...
    

    为确保这能正常工作,您可能需要删除先前测试已设置的 cookie,或default在您的开关中放置一个案例。

    于 2013-02-20T14:07:50.677 回答