2012-03-12 3 views
0

Я пытаюсь использовать localStorage для сохранения массива строк. У меня есть функция addToFav(string), которая предназначена для загрузки строкового значения в массив, который содержит имена программ или pNames в моем случае. Я стараюсь следовать этой схеме: 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. Тем не менее, запуск функции снова должен добавить еще один элемент в массив, но это не так, он просто несколько раз добавляет к pNames [0], потому что я думаю, что pNames и arrayNum получают каждый раз. С этим, кто-нибудь знает, как предотвратить эту проблему? Я хотел бы создать массив, который добавляет любимые элементы, когда пользователь вызывает мою функцию.

Спасибо!

ответ

2

Это потому, что вы каждый раз используете pNames как свой ключ.

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

Вы должны сделать что-то вроде:

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

Это выглядит как отличный ответ. Могу ли я предложить в качестве потенциального улучшения: 'length = localStorage ['pNames']. Length; localStorage ['pNames'] [length] = JSON.stringify (pNames); ' – NT3RP

+0

не будет каждый раз создавать разные ключи? Я пытаюсь следовать чему-то в этом роде: http://stackoverflow.com/questions/3357553/how-to-store-an-array-in-localstorage – user1152440

+0

Нет. Если «someVal» будет содержать уникальную информацию (как ключ должен) - он создаст тот же ключ для определенного значения. –

0

Никогда доступ LocalStorage как обычный объект! Используйте according functions for that. Это также исправляет вашу ошибку в упомянутом коде ido;)

+0

Я пытаюсь выполнить это решение: http://stackoverflow.com/questions/3357553/how-to-store-an-array-in-localstorage, правильно ли я делаю это? – user1152440

+0

Не делайте этого. Это неправильный путь. [Я рекомендую вам эту ссылку] (https://developer.mozilla.org/en/DOM/Storage) о DOM-Storage API. [Или официальная спецификация W3C] (http://dev.w3.org/html5/webstorage/#the-localstorage-attribute). – Christoph

+0

Хорошо, я проверю это сейчас; есть способ объявить ключи хранения только один раз? Потому что это для мобильного приложения, поэтому я не хочу повторно инициализировать каждый раз, когда приложение запускается. – user1152440

Смежные вопросы