2013-02-20 59 views
0

此脚本应计数cookie的设置次数,并在count为1或2时执行特定操作。由于某种原因,它不会匹配1中的1开关。我曾尝试将它作为字符串“1”来操作,我试图用许多不同的方式重写它。似乎没有什么能让它匹配。Javascript:switch与从cookie中提取的变量值不匹配

<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脚本反应===空,但它设置为1的cookie值。第二次点击它应该提醒您cookie值现在将变为2.第三次点击不会再次发出警报,但是当设置为3时,该值不会再发出警报。就好像交换机没有运行一样。

+0

alert或console.log cookie值 – mplungjan 2013-02-20 13:41:49

+2

只是一个观察 - 除了'alert'语句,您的'case 1'和'case 2'主体是相同的。 – JAAulde 2013-02-20 14:00:43

回答

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情况下进入你的开关。

    +0

    非常感谢。我不明白的是,我知道我也试过情况“1”,看它是否作为一个字符串传递,它不工作。捣蛋鬼!但是,再次感谢这个简单的解决方案。我的夜晚正式结束。我可以去睡觉了! – 2013-02-20 14:17:36

    +0

    @ user50512我也不确定。我刚刚用'cookieValue ===“1”'试了一下,它成功地进入了第一个案例并将其设置为“11”。也许这是在你有警戒之前做到的,然后又没有进入开关了?但我很高兴我能帮忙。晚安!哈哈 – jonhopkins 2013-02-20 14:19:43

    +0

    一个很好的答案。 – 2013-02-20 14:43:32