2013-03-12 75 views
1

我正尝试在JavaScript中使用Cookie来创建一个警报,这两个cookie都通过名字向用户致意,并告诉他们他们在网站上赢得了特定游戏的次数。我有用户问候工作正常,但我似乎无法让计数器正常工作。它涉及调用前一个函数改变的变量,我认为这是我的问题所在,但我不知道如何解决这个问题。 (这些变量被称为“cardOnePoints”和“cardTwoPoints”。)任何人都可以帮我解决这个问题,或者告诉我是否还有其他问题?Cookie提醒,从另一个函数内部调用一个变量?

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); 
     } 
    } 
} 
+0

使用localStorage的,除非你需要支持 howderek 2013-03-12 23:23:03

+0

对不起,我不明白这是如何适用于调用这些变量在被改变后? – hayleyelisa 2013-03-12 23:30:07

+0

今后请使用正确的标签。另外,你似乎以奇怪的方式使用分号 – 2013-03-12 23:34:52

回答

0

有很多事情正在进行。还有一些多余的代码。
我认为主要问题源于有一个名为“gamesWonCount”的cookie和另一个名为“getCount”的cookie。你也有2个变量和一个跟踪这个数字的函数(winnerCount,gamesWin,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中并且您今天赢得的总胜数。

您可能还需要设置cookie值每次你calculateWinnerCount()这样的:

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

非常感谢!我的代码变得非常混乱,因为我已经尝试了很多不同的方式来解决它,所以我很感谢你帮助解决这个问题,但即便如此,无论用户有多少次,计数器仍然只返回0值实际上赢了。我真的认为问题在于不得不调用前一个函数改变的变量(cardOnePoints和cardTwoPoints)? – hayleyelisa 2013-03-12 23:53:20

+0

不幸的是,从这里我无法确定问题出在哪里。您可以随时在JsFiddle上创建测试应用程序并将其发布到此处。通常会得到最好的结果。 http://jsfiddle.net/ – Danwilliger 2013-03-12 23:56:36

+0

好吧,这里是我的完整代码... http://jsfiddle.net/hayleyelisa/9padf/1/ – hayleyelisa 2013-03-13 00:02:39

相关问题