2011-10-04 82 views
2

第一次海報,長時間的讀者。不保存尋寶遊戲的腳本

所以我需要創建一個快速簡單的尋寶。這些想法是將一些值存儲在cookie中,並且當用戶點擊具有匹配id的元素時,更新以下值。它還沒有在那裏,但是當這個人找到了全部8個(在這種情況下)它會觸發一些東西。

現在,我已經完成了大部分工作,但我遇到了一個大問題。 Cookie不是一頁一頁地存儲的。如果我正在關閉單個測試頁面,那就好了 - 創建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: '/' }); 

附:您在var treasure = new Array()聲明末尾丟失了分號。

+0

工程就像一個魅力。感謝您及時的回覆。 :) – purpleoctopus

+0

很高興你的第一個問題的經驗是一個很好的! –

+0

謝謝你回覆我這麼快!那真是太神奇了 - 我去搶一碗湯然後BAM!問題解決了。 – purpleoctopus