Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.08.2013, 13:33
Новичок на форуме
Отправить личное сообщение для berserk10 Посмотреть профиль Найти все сообщения от berserk10
 
Регистрация: 11.08.2013
Сообщений: 4

Обход элементов localStorage
Доброго времени суток. Пишу корзину, которая будет храниться в localStorage. Во время загрузки страницы сначала получаются все ключи, по которым товар были записаны в localStorage:

function indexStorage(){
    list = [];
    for (var name in localStorage){
        list.push(name)
    }
    return list;
}


а затем по этим ключам получаются данные и дальше обрабатываются (формируется корзина, кнопки "Купить" заменяются на "Уже в корзине" и так далее). Проблема возникает во время обхода списка ключей:

for (var item in indexStorage()){
        var dict = localStorage.getItem(item);
        alert(dict)
    }


С таки кодом после загрузки страницы выводится значение nullдля всех ключей. Я раньше с javascript-ом особо не сталкивался, работал только с серверной частью, а сейчас решил переписать серверный вариант корзины на javascript. Самому кажется, что ошибка примитивная и я где-то неправильно делаю обход списка, но разобраться никак не могу. Заранее благодарен за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 11.08.2013, 13:55
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

<table>
   <tbody id="backet"></tbody>
</table>

(function() {
   var td = '';
   for(var i in localStorage) if(typeof localStorage[i] == 'string') td += '<tr><td>' + i + '</td><td>' + localStorage[i] + '</td></tr>';
   document.getElementById('backet').innerHTML = td;
})();
Ответить с цитированием
  #3 (permalink)  
Старый 11.08.2013, 14:03
Новичок на форуме
Отправить личное сообщение для berserk10 Посмотреть профиль Найти все сообщения от berserk10
 
Регистрация: 11.08.2013
Сообщений: 4

Пара вопросов.
Насколько я понял, после условия цикла идет проверки, является ли значение ключа строкой. У меня это не строка. Я передаю объект, а точнее словарь со значением имени, цены и так далее. Нужна ли эта проверка для работы функции?
И второй вопрос. Фигурные скобки вокруг тела цикла случайно пропущены или так и должно быть?
Ответить с цитированием
  #4 (permalink)  
Старый 11.08.2013, 14:20
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

berserk10, нельзя объекты хранить в localStorage, можно либо число, либо строку.
Сообщение от berserk10
Фигурные скобки вокруг тела цикла случайно пропущены или так и должно быть?
Ну так же как и с if, если одна строка кода, то фигурные скобки не обязательны.

Записывайте все товары прямо в localStorage и извлекайте их кодом (см. выше).

localStorage.chocolate = '3';
localStorage.yogurt = '5';

Последний раз редактировалось ruslan_mart, 11.08.2013 в 14:23.
Ответить с цитированием
  #5 (permalink)  
Старый 11.08.2013, 14:25
Новичок на форуме
Отправить личное сообщение для berserk10 Посмотреть профиль Найти все сообщения от berserk10
 
Регистрация: 11.08.2013
Сообщений: 4

То есть ошибка именно из-за того, что хранится объект? Значит если я правильно понял, то для каждого товара нужно либо делать несколько записей по ключам типа id-цвет-имя, id-цвет-цена, либо все записывать в строку, а потом обрабатывать её на сервере. Что-то вроде словаря хранить никак нельзя?
Ответить с цитированием
  #6 (permalink)  
Старый 11.08.2013, 14:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от berserk10
У меня это не строка.
Да ты че? А ничего, что в localStorage можно хранить только строки?
Ответить с цитированием
  #7 (permalink)  
Старый 11.08.2013, 14:30
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Как вариант, Вы можете передавать всё строкой:
localStorage.chocolate = 'с орехом|5 шт.|100 рублей';


А затем разбивать всё на массив и записывать в объект:
var basket = {};
for(var i in localStorage) if(typeof localStorage[i] == 'string') basket[i] = localStorage[i].split('|');

alert(basket.chocolate);
Ответить с цитированием
  #8 (permalink)  
Старый 11.08.2013, 14:39
Новичок на форуме
Отправить личное сообщение для berserk10 Посмотреть профиль Найти все сообщения от berserk10
 
Регистрация: 11.08.2013
Сообщений: 4

Всё понял. Спасибо за помощь.
Ответить с цитированием
  #9 (permalink)  
Старый 11.08.2013, 14:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ruslan_xDD, зачем же велосипедить. Есть же JSON.stringify()/JSON.parse()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список элементов в localStorage? Бобр Общие вопросы Javascript 8 17.09.2013 14:32
Как сделать обход элементов внутри DIV reno4 jQuery 4 24.07.2013 13:30
Получить список ВСЕХ элементов DOM Почемучкин Events/DOM/Window 7 16.04.2012 11:33
Обход всех элементов на странице. lexnext1 Элементы интерфейса 0 08.11.2011 12:58
Не сохраняется localStorage после перезагрузки браузера Бобр Firefox/Mozilla 1 20.10.2011 20:31