我正在尝试使用Cookie创建JavaScript警报,该cookie既可以按名称向用户打招呼,又可以告诉他们他们在网站上赢得了特定游戏的次数。我的用户问候语可以正常工作,但是我似乎无法使计数器正常工作。它涉及调用由上一个函数更改的变量,我认为这就是我的问题所在,但我不确定如何解决该问题。 (这些变量称为“ 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);
        }
    }
}

最佳答案

发生了很多事情。和一些多余的代码。
我认为主要问题源于一个名为“ gamesWonCount”的cookie和另一个名为“ getCount”的cookie。您还具有2个变量和一个跟踪该数字的函数(winnerCount,gamesWin,winnerCount())。

第一件事是在一个地方跟踪该数字。我们称之为“ 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(),它将在您的winnerCount变量中添加一个数字,该变量保存您存储在cookie中的总获胜次数。

您可能还想每次每次计算WinnerCount()时都设置cookie值,如下所示:

function calculateWinnerCount() {
  if (cardOnePoints + cardTwoPoints === 21) {
    winnerCount = winnerCount + 1;
    setCookieOne("gamesWonCount", winnerCount, 14);
  }
}

10-04 15:11