簡體   English   中英

Javascript:開關與從Cookie中提取的變量值不匹配

[英]Javascript: switch doesn't match the variable value pulled from cookie

該腳本應計算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時,就好像沒有運行該開關一樣。

我測試了您的代碼,並使用了很多警報,發現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大小寫放入您的交換機中。

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM