第一次发布海报,长时间阅读。
所以我需要创建一个快速而简单的寻宝活动。这些想法是在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 });
}
}
});
答案 0 :(得分:3)
根据README file in github,您需要定义cookie有效的路径,如果您不希望它仅用于创建它的页面:
定义cookie有效的路径。 默认情况下的路径 cookie是创建cookie的页面的路径(标准 浏览器行为)。如果你想让它可用 在整个页面中使用路径:'/'。如果要删除cookie 对于特定路径,您需要在呼叫中包含该路径。
所以我认为会是这样的:
$.cookie('treasure_hunt', treasure, { expires: 7, path: '/' });
P.S。您在var treasure = new Array()
声明结尾处遗漏了一个分号。