2013-02-20 62 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