Cookie不会保存为寻宝游戏

时间:2011-10-04 17:34:48

标签: javascript jquery cookies

第一次发布海报,长时间阅读。

所以我需要创建一个快速而简单的寻宝活动。这些想法是在cookie中存储一些值,当用户单击具有匹配id的元素时,更新以下值。它还没有在那里,但是当这个人找到所有8个(在这种情况下)它会触发一些东西。

现在,我已经完成了大部分工作,但我遇到了一个大问题。 Cookie未在页面之间存储。如果我正在处理单个测试页面,那就很好了 - 创建了cookie,从中提取了值并将其放入检查数组,并且计数器正确递增。此外,当更新cookie时,新值正好存储。

但是,当我转到另一个页面并检查cookie时 - 它已经消失了。现在,我检查了cookie是否真的被丢弃了,是的,它就在那里。但是有多个cookie都具有相同的名称(它们正在更新值 - 但同样它只是页面到页面,所以没有累积效果)。

所以,我想我不明白为什么当我调用cookie并重置它时,它不会影响单个cookie而是创建一个新的?

哦,我正在使用jQuery 1.4.2和jQuery cookie插件。

// if not present create default array and store in cookie cookie
if($.cookie('treasure_hunt') == null) {

var treasure = new Array(
    "arteContactEn",0,
    "arteCorpEn",0,
    "arteServicesEn",0,
    "arteRoomsEn",0,
    "arteDiningEn",0,
    "artePackEn",0,
    "arteHotelEn",0,
    "arteHomeEn", 0
)
   $.cookie('treasure_hunt', treasure, { expires: 7 });
}

// capture cookie info
var treasureFound = $.cookie('treasure_hunt');

// create check array and parse values into it
var treasureCheck = new Array();
var treasureCheck = treasureFound.split(',');

// function checks array and tallies total found items
function checkFound() { 
var foundItems = 0;

for(var i=0; i<treasureCheck.length; i++) {
    var value = treasureCheck[i];
    if(value == 1) {
        ++foundItems;
    }
}
// writes found items to span on page
$('.thProgress').text(foundItems);

}

// check number artefacts and write to page
var treasureTotal = treasureCheck.length / 2;
$('.thTotal').text(treasureTotal);

// on click checks element id against array and, if found, marks the following value as 1
$('.artefact-right, .artefact-left').click(function(){
var artefactID = $(this).attr('id');

for(var e=0; e<treasureCheck.length; e++) {
    var matchID = treasureCheck[e];
    var k = e + 1;

    if(matchID == artefactID) {
        treasureCheck[k] = 1;

        // checks for total found items
        checkFound();

        // updates cookie with new array
        $.cookie('treasure_hunt', treasureCheck, { expires: 7 });
    }

}

});

1 个答案:

答案 0 :(得分:3)

根据README file in github,您需要定义cookie有效的路径,如果您不希望它仅用于创建它的页面:

  

定义cookie有效的路径。 默认情况下的路径   cookie是创建cookie的页面的路径(标准   浏览器行为)。如果你想让它可用   在整个页面中使用路径:'/'。如果要删除cookie   对于特定路径,您需要在呼叫中包含该路径。

所以我认为会是这样的:

$.cookie('treasure_hunt', treasure, { expires: 7, path: '/' });

P.S。您在var treasure = new Array()声明结尾处遗漏了一个分号。