Почему мне нужно вручную очистить локальное хранилище с консоли. Каждый раз, когда загружается мой сайт

#javascript #django #innerhtml

Вопрос:

Я создал корзину покупок и сделал функцию обновления корзины в JavaScript, которая работает нормально, но когда я перехожу на другую страницу, моя корзина автоматически не переключается на (1), и в консоли появляется ошибка, подобная этой:

 Uncaught TypeError: Cannot set property 'innerHTML' of null
at updateCart ((index):447)
at (index):411
 

Мой код javascript таков:

 <script>
// Find out the cart items from localStorage
if (localStorage.getItem('cart') == null) {
var cart = {};
} else {
cart = JSON.parse(localStorage.getItem('cart'));
document.getElementById('cart').innerHTML = Object.keys(cart).length;
updateCart(cart);
}
// If the add to cart button is clicked, add/increment the item
$('.cart').click(function() {
var idstr = this.id.toString();
if (cart[idstr] != undefined) {
    cart[idstr] = cart[idstr]   1;
} else {
    cart[idstr] = 1;
}
updateCart(cart);

});
//Add Popover to cart
$('#popcart').popover();
updatePopover(cart);
function updatePopover(cart)
{
console.log('We are inside updatePopover');
var popStr = "";
popStr = popStr   " <h5>Cart for your items in my shopping cart</h5><div class='mx-2 my-2'>";
var i = 1;
for (var item in cart){
    popStr = popStr   "<b>"   i   "</b>. ";
    popStr = popStr   document.getElementById('name'   item).innerHTML.slice(0,19)   "... Qty: 
"   cart[item]   '<br>';
    i = i 1;
}
popStr = popStr   "</div>" 
console.log(popStr);
document.getElementById('popcart').setAttribute('data-content', popStr);
$('#popcart').popover('show');
}
function updateCart(cart) {
var sum = 0;
for (var item in cart) {
    sum = sum   cart[item];
    document.getElementById('div'   item).innerHTML = "<button id='minus"   item   "' 
    class='btn btn-dark minus'>-</button> <span id='val"   item   "''>"   cart[item]   " 
    </span> <button id='plus"   item   "' class='btn btn-dark plus'>   </button>";
}
localStorage.setItem('cart', JSON.stringify(cart));
document.getElementById('cart').innerHTML = sum;
console.log(cart);
updatePopover(cart);
}
// If plus or minus button is clicked, change the cart as well as the display value
$('.divpr').on("click", "button.minus", function() {
a = this.id.slice(7, );
cart['pr'   a] = cart['pr'   a] - 1;
cart['pr'   a] = Math.max(0, cart['pr'   a]);
document.getElementById('valpr'   a).innerHTML = cart['pr'   a];
updateCart(cart);
});
$('.divpr').on("click", "button.plus", function() {
a = this.id.slice(6, );
cart['pr'   a] = cart['pr'   a]   1;
document.getElementById('valpr'   a).innerHTML = cart['pr'   a];
updateCart(cart);
});
</script>
 

После этой ошибки каждый раз, когда мне нужно очистить хранилище в консоли, набрав localstorage.clear (), и если я добавлю какой-то атом в корзину и перейду в другую категорию, моя кнопка «Добавить в корзину» не работает.

Комментарии:

1. Ошибка возникает из-за того, что вы не проверяете .getElementById() , не возвращает ли значение null (что явно так и есть, когда вы получаете ошибку).

2. как это решить? у тебя есть какие-нибудь идеи?

3. Добавьте if инструкцию, чтобы убедиться, что .getElementById() она не возвращается null .

4. строки вашего задания разбиты, вы должны, по крайней мере, использовать обратные кавычки