mustang_shelby
@mustang_shelby
i like (*_metallica_*)

Вопрос про LocalStorage, почему?

Доброго всем времени суток !
у меня такая трудность, я делаю корзину - данные которые должны сохраняться в localStorage = при каждом клике на определенный товар - данные пишутся в объект, в объекте у меня есть массив - на кнопке есть артикул товара = удобно проверять, если такой артикул в массиве есть добавляем на 1++ если нет то создать в масив такой элемент с такими то данными. Функция работает в массив при i++ товар добавляется товар - но когда после проверки я вызываю функцию которая принимает объект с данными он его сохраняет - Но когда я обновляю страницу и попытаюсь добавить данные то они куда пропадают и в объект в котором есть массив снова добавляются как будто не чего я и не сохранял.

/**
	TESTING THE SYSTEMS 
	JAVASCRIPT 
	UNIT-TESTING 
    ===================
*/

/* start create cart*/
function run_cart() {
	// save db cart
	let pay = {};
	showCart = document.querySelector(".addCart");
	itemBox = document.querySelectorAll(".push");
	showCart.onclick = showProducts;
	// localStorage setter
	function setCartData(o) {
		localStorage.setItem('cart', JSON.stringify(o));
		return false;
	}

	// localStorage getter
	function getCartData() {
		return JSON.parse(localStorage.getItem('cart'));
	}

	/**
	* Adding and cheking cart
	* true - add to current
	* false - create Obj and save db
	*/
	function addToCard() {

		let parentBox = this.parentNode,

		_keyAttr = this.getAttribute("xid"),
		item_title = parentBox.querySelector(".item_title p").innerHTML,
		item_desc = parentBox.querySelector(".item_desc p").innerHTML,
		price = parentBox.querySelector(".price").innerHTML;

		// cheking obj
		if (pay.hasOwnProperty(_keyAttr)) {
			pay[_keyAttr][3] += 1;
		} else {
			pay[_keyAttr] = [item_title, item_desc, price, 1];
		}	


		if (pay !== null) {
			setCartData(pay);
		}
	}


	// add event 
	for(let i = 0; i < itemBox.length; i++) {
		itemBox[i].addEventListener("click", addToCard);
	}

}

run_cart();
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
@VadimFox
Не актуально =)
В setCartData не передаете данные (Параметр "O")


Вы упустили перед записью получение уже записанных данных и добавление их в массив, таким образом вы просто записываете новую информацию по верх старой.

я понял - он же данные не видит после обновления а конечно как если он не получает, их поэтому и пишет заново.
@Вячеслав Коростин
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
setCartData();

похоже, корзинку-то забыли. Сохраняется пустота.
spoiler
наверное, надо так:setCartData(pay);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы