2012-03-12 138 views
0

我正在嘗試使用localStorage來保存字符串數組。我有一個函數addToFav(string)這意味着將字符串值加載到保存程序名稱的數組中,或者在我的情況下是pName。我想按照這個大綱:How do I store an array in localStorage?避免重複聲明

localStorage.arrayNum = 0; 
var pNames=[]; 


function addToFav(string) 
{ 
    pNames[localStorage.arrayNum] = string; 

    if (localStorage.arrayNum) 
    { 
     localStorage.arrayNum=Number(localStorage.arrayNum)+1; 
    } 
    else 
    { 
     localStorage.arrayNum=1; 
    } 

    localStorage['pNames']=JSON.stringify(pNames); 
    var storedNames=JSON.parse(localStorage['pNames']); 

    document.getElementById("testField").innerHTML=storedNames; 

} 

當我點擊調用addToFav(string)按鈕,我傳遞給函數顯示在testfield DIV,這是OK的字符串。然而,再次啓動函數應該添加另一個元素到數組中,但它不會,它只是反覆地添加到pName [0],這是因爲我認爲​​和arrayNum每次都得到重新聲明。有了這個,有沒有人知道如何防止這個問題?我想創建一個數組,當用戶調用我的函數時添加最喜歡的項目。

謝謝!

回答

2

這是因爲您每次都使用pName作爲您的密鑰。

localStorage['pNames']=JSON.stringify(pNames); 

你應該這樣做:

localStorage['pNames'+someVal]=JSON.stringify(pNames); 
+0

這看起來像一個很好的答案。可能我建議作爲一種潛在的改進:'length = localStorage ['pNames']。length; localStorage ['pNames'] [length] = JSON.stringify(pName);' – NT3RP 2012-03-12 20:43:03

+0

不會每次都創建不同的密鑰?我試圖遵循這個帖子的行:http://stackoverflow.com/questions/3357553/how-to-store-an-array-in-localstorage – user1152440 2012-03-13 13:27:04

+0

號。如果'someVal'將包含獨特的信息(作爲一個鍵應該) - 它將爲特定的值創建相同的鍵。 – 2012-03-14 12:59:48

0

從未訪問localStorage的像一個正常的對象!使用according functions for that。這也解決了你在提到的代碼ido中的錯誤;)

+0

我試圖按照這個解決方案:http://stackoverflow.com/questions/3357553/how-to-store-an-array-in-localstorage,我做得對嗎? – user1152440 2012-03-13 16:18:20

+0

不要這樣做。這是錯誤的方式。 [我向你推薦此鏈接](https://developer.mozilla.org/en/DOM/Storage)關於DOM-Storage API。 [或官方的W3C規範](http://dev.w3.org/html5/webstorage/#the-localstorage-attribute)。 – Christoph 2012-03-13 16:26:53

+0

好吧我現在正在檢查這個;有沒有辦法只聲明一次存儲密鑰?因爲這是針對移動應用的,所以我不想在每次啓動應用時重新初始化。 – user1152440 2012-03-13 16:55:44