2012-03-12 128 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