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 に設定されます。2 回目のクリックでは、Cookie の値が次のようになることが警告されます。 2 にします。3 回目のクリックでは再度アラートは発生しませんが、値は 3 に設定されます。まるでスイッチが実行されていないかのようです。

4

1 に答える 1

1

私はあなたのコードをテストし、たくさんのアラートを使用して、それcookieValueが確かに文字列であることがわかりました。文字列を検索するようにスイッチを変更したときに機能しなかった理由についての私の推測は、スイッチが検索していない値にすでに設定されていたためです。

したがって、コードが立っているとき、イベントの順序は次のようになります。

  • 最初のクリック時にCookieはnullになります(新しい環境を想定)。次に、文字列「1」に設定されます
  • 2回目のクリックで、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 に答える