【问题标题】:How to update localStorage without reload the page?如何在不重新加载页面的情况下更新 localStorage?
【发布时间】:2021-07-17 06:47:27
【问题描述】:

我正在构建一个购物车,其中包含从 json 服务器获取的产品。我已经设法显示产品,实现添加到购物车功能并显示数量,但是,我现在卡在增量和减量功能上。这个想法是每次用户单击 + 和 - 按钮时,product.count 属性都会更改(我用它来将其显示在购物车表上)。这是我的代码

load cart from localstorage
function loadCart() {
    let products = JSON.parse(localStorage.getItem('products'));
    let cartTotalItem = document.querySelector('.cart__value');
    cartTotalItem.textContent = products.length;
    products.forEach(product => {
        let cartItem = document.createElement('tr');
        cartItem.innerHTML = `<td><img src="${product.imgSrc}" alt='product image'></td>
                  <td>${product.name}</td>
                  <td><span class='cart-price'>${product.price},000vnd</span></td>
                  <td>
                    <button action="remove" onclick='decrease()'>-</button>
                    <input name='product' class="product__quantity" type="number" min='1' max='100' value='${product.count}'>
                    <button action="add" onclick='change()' >+</button>
                  </td>
                  <td><span class='cart-total-value'>${parseInt(product.price) * product.count},000vnd</span></td>
                  <td>
                    <button class="delete--item"><i class="far fa-trash-alt"></i></button>
                  </td>`;
        tableBody.appendChild(cartItem);
    });
}

我尝试实现的功能


function change() {
    let products = JSON.parse(localStorage.getItem('products'));
    for (let i = 0; i < products.length; i++) {
        let inputValue = document.querySelector('.product__quantity').textContent
        inputValue = products[i].count++
        localStorage.setItem('products', JSON.stringify(products))
    }
}

function decrease() {
    let products = JSON.parse(localStorage.getItem('products'));
    for (let i = 0; i < products.length; i++) {
        let inputValue = document.querySelector('.product__quantity').value
        inputValue = products[i].count--
        localStorage.setItem('products', JSON.stringify(products))
    }
}

问题是我必须重新加载页面才能使更改反映在页面上。谁能帮帮我?

【问题讨论】:

  • 这个问题与本地存储无关。问题是,您只在页面加载时加载购物车一次,而不是在数量变化时加载。要么在 change()decrease() 内调用 loadCart,要么在这些函数中进行必要的更新
  • 我也是这样做的。相反,我在里面追加了一个新的表格行。

标签: javascript html css json local-storage


【解决方案1】:

我认为你需要在 localStorage 中的产品更改后再次调用 loadCart()。

function change() {
    let products = JSON.parse(localStorage.getItem('products'));
    for (let i = 0; i < products.length; i++) {
        let inputValue = document.querySelector('.product__quantity').textContent
        inputValue = products[i].count++
        localStorage.setItem('products', JSON.stringify(products))
    }
    loadCart()
}

function decrease() {
    let products = JSON.parse(localStorage.getItem('products'));
    for (let i = 0; i < products.length; i++) {
        let inputValue = document.querySelector('.product__quantity').value
        inputValue = products[i].count--
        localStorage.setItem('products', JSON.stringify(products))
    }
    loadCart()
}

【讨论】:

  • 感谢您的帮助,我也是这样做的,但它只是在表格中追加了一个新的表格行
  • 您需要创建一个函数来删除旧表行,然后在上面显示的 loadCart() 函数之前调用它。
  • 谢谢先生。但是你能告诉我如何编写那个函数吗?
猜你喜欢
  • 2010-12-22
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 2014-05-13
  • 2016-03-12
  • 2017-03-03
相关资源
最近更新 更多