Избегайте повторных объявлений - PullRequest
0 голосов
/ 13 марта 2012

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

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

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

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

localStorage['pNames'+someVal]=JSON.stringify(pNames);
0 голосов
/ 13 марта 2012

Никогда не открывайте локальное хранилище, как обычный объект!Для этого используйте соответствующие функции .Это также исправляет вашу ошибку в упомянутом коде;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...