即使在 localstorage javascript 中刷新页面后,仍保留 HTML 可见数据

keep html visible data even after refreshing the page in localstorage javascript

提问人:Sarah Bader 提问时间:9/27/2023 最后编辑:A.LSarah Bader 更新时间:9/27/2023 访问量:36

问:

我制作了一个包含一些商品的购物车页面,我制作了一个deleteItemFromCart()函数,用于删除想要删除的商品。

我无法做的一件事是将更改存储到浏览器,因此每当用户刷新浏览器时,都会出现相同的更改,可悲的是,每当我刷新页面时,所有更改都会设置回默认情况。

我还曾经做过一个货币兑换选项,它奏效了......但是,将更改保存到 localStorage 时仍然会出现相同的问题。

我试图处理这段代码,但似乎没有任何效果:

localStorage.setItem("key", "value");

// Get all delete buttons
var deleteBtns = document.getElementsByClassName("delete_icon");
 
// Add event listeners to delete buttons 
for (var i = 0; i < deleteBtns.length; i++) {   
  deleteBtns[i].addEventListener("click",
  deleteItemFromCart); 
}
 
// Load cart items from localStorage when the page is loaded
window.addEventListener("load", loadCartFromLocalStorage);
 
function deleteItemFromCart(event) {   
  var deleteBtn = event.target;  
  var cartItem = deleteBtn.parentNode.parentNode;   
  cartItem.remove();
  saveCartToLocalStorage(); 
}
 
function saveCartToLocalStorage() {   
  var cartItems =
  document.getElementsByClassName("cartItems");   
  var cartItemsData = [];
 
  for (var i = 0; i < cartItems.length; i++) {
    var cartItem = cartItems[i];
    var image = cartItem.querySelector(".shop-item-image").src;
    var title = cartItem.querySelector(".shop-item-title").textContent;
    var price = cartItem.querySelector(".shop-item-price").textContent;
    var quantity = cartItem.querySelector("input[name='Qauntity']").value;
    var itemData = {
       image: image,
       title: title,
       price: price,
       quantity: quantity
    };
 
    cartItemsData.push(itemData);   }
 
    localStorage.setItem("cartItems", JSON.stringify(cartItemsData)); }
 
function loadCartFromLocalStorage() {   
  var cartItemsData =
  localStorage.getItem("cartItems");
 
  if (cartItemsData) {
    var cartItemsArray = JSON.parse(cartItemsData);
    for (var i = 0; i < cartItemsArray.length; i++) {
      var itemData = cartItemsArray[i];
      var cartItem = document.createElement("tr");
      cartItem.classList.add("cartItems");
      cartItem.innerHTML = `
         <td><img src="${itemData.image}" alt="" class="shop-item-image"></td>
         <td><h2 class="shop-item-title">${itemData.title}</h2></td>
         <td><p class="shop-item-price">${itemData.price}</p></td>
         <td><input type="number" name="Qauntity" value="${itemData.quantity}"></td>
         <td><span class="material-symbols-outlined delete_icon" id="delete_icon">
           delete
         </span></td>
     `;
 
      document.querySelector(".product_items").appendChild(cartItem);
    }
  }
}
<!-- 1st section cart items -->    
<div class="table_container">
  <table>
    <tr>
      <th></th>
      <th>Product</th>
      <th>Price</th>
      <th>Qauntity</th>
      <th>Remove</th>
    </tr>
    <div class="product_items">
    <!-- first item -->
    <tr>
      <td><img src="./assets/images/tutu-skirt1.jpg" alt=""></td>
      <td><h2>tutu Skirt</h2></td>
      <td><p>5 JOD</p></td>
      <td><input type="number" name="Qauntity" id="qauntity"></td>
      <td><span class="material-symbols-outlined delete_icon">delete</span></td>
    </tr>
    <!-- other item -->
    <tr>
      <td><img src="./assets/images/tutu-skirt2.jpg" alt=""></td>
      <td><h2>tutu Skirt</h2></td>
      <td><p>5 JOD</p></td>
      <td><input type="number" name="Qauntity" id="qauntity"></td>
      <td><span class="material-symbols-outlined delete_icon">delete</span></td>
    </tr>
    <!-- other item -->
    <tr>
      <td><img src="./assets/images/tutu-skirt3.jpg" alt=""></td>
      <td><h2>tutu Skirt</h2></td>
      <td><p>5 JOD</p></td>
      <td><input type="number" name="Qauntity" id="qauntity"></td>
      <td><span class="material-symbols-outlined delete_icon">delete</span></td>
    </tr>
  </div>
  </table>
</div>
 
<div class="total">
  <p>Total Price : <strong class="cart-total-price">15.00 JOD</strong></p>
  <button class="btn buy">Purchase</button>
</div>

javascript 本地存储 货币 购物车

评论

1赞 mykaf 9/27/2023
我注意到您有重复的元素 ID,例如 ;ID 必须是唯一的,并且可能会导致您的问题。id="quantity"
1赞 A.L 9/27/2023
在原始代码中,我进行了注释,我更新了问题,使其不会使代码片段崩溃。如果它是按原样在代码中编写的,请恢复它。var deleteBtns =
0赞 Peter Seliger 9/27/2023
无论如何,当前购物车在刷新页面上的状态表示形式绝不应仅依赖于本地存储的状态,因此很可能已过时。真相在于后端。唯一有效的用例是在离线浏览器的情况下进行回退。

答: 暂无答案