Как хранить данные в массиве для строковой обработки (javascript)

Только что запустил JS, прочитал кучу ответов SO, таких как этот или этот или этот другой, но все еще возникают проблемы с его работой. У меня есть список элементов inventory, всякий раз, когда кто-то щелкает, я хочу, чтобы идентификатор этого элемента (хранящийся как атрибут данных) был помещен в объект корзины sessionStorage. Неработающий код ниже, комментарии показывают, каков результат. Похоже, у меня проблема JSON.stringifying с массивом.

Помощь очень ценится.

    var cart = [];
    $(document).on("click", "#inventory", function() { // let's say i clicked on the #inventory whose data attribute for inventory_id is 13
      console.log($(this).data('inventory_id')) // outputs 13
      cart.push($(this).data('inventory_id')) 
    });
    console.log(cart) // outputs an array where Array[1] = 13 in last example
    console.log(JSON.stringify(cart)) // outputs a blank: []
    localStorage.setItem("cart", JSON.stringify(cart));
    console.log(localStorage.getItem("cart"))  // outputs a blank: []

person james    schedule 23.08.2014    source источник
comment
Есть только один ОСНОВНОЙ недостаток, идентификаторы уникальные, у вас не может быть более одного элемента с одним и тем же идентификатором.   -  person adeneo    schedule 24.08.2014
comment
И, кроме того, вся ваша логика находится за пределами обработчика кликов и происходит только при загрузке страницы, а не при нажатии чего-либо?   -  person adeneo    schedule 24.08.2014
comment
нет, все работает нормально, логика внутри обработчика кликов, это строка cart.push. Что касается первой проблемы, да, все мои идентификаторы уникальны.   -  person james    schedule 24.08.2014
comment
Поместить нажатие в массив на самом деле ничего не делает, кроме нажатия в массив, он не обновляет хранилище или делает что-то еще?   -  person adeneo    schedule 24.08.2014
comment
о, вы говорите, что мне нужно переместить локальное хранилище в обработчик кликов, я вижу, спасибо!   -  person james    schedule 24.08.2014


Ответы (1)


Согласно обсуждению комментариев, правильным ответом было просто поместить localStorage.setItem в сам обработчик событий.

var cart = [];
$(document).on("click", "#inventory", function() { // let's say i clicked on the #inventory whose data attribute for inventory_id is 13
  cart.push($(this).data('inventory_id'));
  localStorage.setItem("cart", JSON.stringify(cart));
});
person james    schedule 23.08.2014