1

ユーザーに名前で挨拶し、Web サイトで特定のゲームに勝った回数を通知する Cookie を使用して、JavaScript でアラートを作成しようとしています。ユーザー グリーティングは正常に機能していますが、カウンターが正しく機能していないようです。以前の関数によって変更された変数を呼び出す必要があり、それが私の問題だと思いますが、それを修正する方法がわかりません。(変数は 'cardOnePoints' および 'cardTwoPoints' と呼ばれます。) 誰かが私を助けてくれますか、それとも私が間違っていることが他にあるかどうか教えてくれますか?

function getCookieOne(c_name)
{
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i<ARRcookies.length;i++)
    {
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if(x==c_name)
        {
            return unescape(y);
        }
    }
}

function setCookieOne(c_name,value,exdays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
} 

var winnerCount;
var getCount = getCookieOne('getCount');

function winnerCount()
{
    if (cardOnePoints + cardTwoPoints === 21)
    {
        winnerCount = getCount + 1
    }
    else 
    {
        winnerCount = getCount
    };
}

function countWinner()
{
    return winnerCount
}

function checkCookie()
{
    var username=getCookieOne("username");
    var gamesWonCount=getCookieOne("gamesWonCount");

    function winnerCounter() 
    {
        var gamesWin
        if (cardOnePoints + cardTwoPoints === 21)
        {
            gamesWin=++winnerCount;
        }
        else 
        {
            gamesWin=winnerCount
        };
        return gamesWin
    }

    if (username!=null && username!="")
    {
        alert("Sup " + username+ "!!! Woah man, you've won "
            + countWinner() + " game(s)!!!");
    }
    else 
    {
        username=prompt("Please enter your name:","");
        if (username!=null && username!="")
        {
            setCookieOne("username",username,365);
        }
    }
}
4

1 に答える 1

0

多くのことが起こっています。そして、いくつかの余分なコード。
主な問題は、「gamesWonCount」と呼ばれる Cookie と「getCount」と呼ばれる別の Cookie に起因すると思います。この数を追跡する 2 つの変数と関数もあります (winnerCount、gamesWin、winnerCount())。

まず、その番号を 1 か所で追跡します。「winnerCount」としましょう。

次に、「calculateWinnerCount」という関数を作成しましょう。これは、カードの結果に基づいて勝利数を計算します。「winnerCount」の基本量は Cookie の値に設定されていることに注意してください。

私たちは常に WinnerCount という変数を操作しているので、アラート関数でそれを使用できます。

コードは次のとおりです。

function getCookieOne(c_name)
{
   var i,x,y,ARRcookies=document.cookie.split(";");
   for (i=0;i<ARRcookies.length;i++) {
     x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
     y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
     x=x.replace(/^\s+|\s+$/g,"");
     if (x==c_name)
     {
        return unescape(y);
     }
  }
}

function setCookieOne(c_name,value,exdays) {
  var exdate=new Date();
  exdate.setDate(exdate.getDate() + exdays);
  var c_value=escape(value) + ((exdays==null) ? "" : ";
    expires="+exdate.toUTCString());
  document.cookie=c_name + "=" + c_value;
} 

var winnerCount = getCookieOne('gamesWonCount') || 0;

function calculateWinnerCount() {
  if (cardOnePoints + cardTwoPoints === 21) {
    winnerCount = winnerCount + 1;
  }
}

function checkCookie()
{
  var username=getCookieOne("username");

  if (username!=null && username!="") {
    alert("Sup " + username+ "!!! Woah man, you've won "
        + winnerCount + " game(s)!!!"
        );
  } else {
    username=prompt("Please enter your name:","");
    if (username!=null && username!="") {
     setCookieOne("username",username,365);
    }
  }
}

これらの関数をどのように使用または呼び出しているのかわかりません。しかし、すべてのカード ゲームの最後に calculateWinnerCount() を呼び出すと、cookie に保存した合計勝利数と今日の勝利数を保持する WinnerCount 変数に数値が追加されます。

次のように、calculateWinnerCount() を実行するたびに Cookie の値を設定することもできます。

function calculateWinnerCount() {
  if (cardOnePoints + cardTwoPoints === 21) {
    winnerCount = winnerCount + 1;
    setCookieOne("gamesWonCount", winnerCount, 14);
  }
}
于 2013-03-12T23:41:47.547 に答える