【问题标题】:Shopping Cart Total Price and Quantity购物车总价和数量
【发布时间】:2019-08-15 04:37:59
【问题描述】:

下面有一个购物车,当您删除产品时它会起作用并且价格会更新,但是当我尝试添加更多数量(例如 2 或 3)时,总价格不会更新,但是当我删除产品时它会更新了,这就是我不知道如何解决的问题所在。 此外,我添加了一个带数量的函数,因此最小订单可能只有 1,如果您尝试添加小于 1 的 0 或 -1,-2,它将自动更改为数字 1,但不起作用,我需要一些帮助。

p.s:这只是一个练习,所以没有 PHP 或其他东西。

<div class="click-cart">
        <div class="cart-row">
            <span class="cart-item cart-header cart-column">ITEM</span>
            <span class="cart-price cart-header cart-column">PRICE</span>
            <span class="cart-quantity cart-header cart-column">QUANTITY</span></div>
          <div class="olp">
            <div class="lakn">
            <img class="shop-item-cart" src="https://www.gettyimages.ca/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg">
            <span class="shop-title">Product 1</span>
            <span class="shop-price">$19.99</span>
            <input class="quantity-input" type="number" value="1">
            <button class="delete-cart">X</button>
          </div></div>
            <div class="clear-checkout">
          <button class="checkout">Checkout</button>
          <button class="clear-cart">Clear Cart</button></div>
          <div class="cart-total">
              <strong class="cart-total-title">Total</strong>
              <span class="cart-total-price">$10.79</span>
          </div>
      </div>```
-------------------------------------------------------------------------
let removeCartItemButtons = document.querySelectorAll('.delete-cart'); 
    for (let i = 0; i < removeCartItemButtons.length; i++) {
    let button = removeCartItemButtons[i]
    button.addEventListener('click', removeCartItem) 
    }

    let quantityInputs = document.querySelector('.quantity-input');
    for (let i = 0; i < quantityInputs.length; i++) {
        let input = quantityInputs[i]
        input.addEventListener('change', quantityChanged);
    }

function removeCartItem (event) {
        let buttonCliked = event.target;
        buttonCliked.parentElement.parentElement.remove()
        updateCartTotal()
    }

    function quantityChanged () {
        let input = event.target
        if (isNaN(input.value) || input.value <= 0) {
        input.value = 1
    }
    updateCartTotal ()
}

function updateCartTotal () {
    let cartItemContainer = document.querySelector('.click-cart');
    let cartRows = cartItemContainer.querySelector('.cart-row');
    let total = 0
    for (let i = 0; i < cartRows.length; i++) {
        let cartRow = cartRows[i]
        let priceElement = cartRow.querySelector('.shop-price');
        let quantityElement = cartRow.querySelectorAll('.quantity-input');
        let price = parseFloat(priceElement.innerText.replace('$', ''))
        let quantity = quantityElement.value
        total = total + (price * quantity)
    }
    total = Math.round(total * 100) / 100
    document.querySelector('.cart-total-price').innerText = '$' + total;
}

【问题讨论】:

    标签: javascript


    【解决方案1】:
        <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" >
            <div>
                <div class="click-cart">
                    <div class="cart-row2">
                        <span class="cart-item cart-header cart-column">ITEM</span>
                        <span class="cart-price cart-header cart-column">PRICE</span>
                        <span class="cart-quantity cart-header cart-column">QUANTITY</span>
                    </div>
                    <div class="cart-row">
                        <div class="lakn">
                            <img class="shop-item-cart" src="https://www.gettyimages.ca/gi-resources/images/Homepage/Hero/UK/CMS_Creative_164657191_Kingfisher.jpg">
                            <span class="shop-title">Product 1</span>
                            <span class="shop-price">$19.99</span>
                            <input class="quantity-input" type="number" value="1" />
                            <button class="delete-cart">X</button>
                        </div>
                    </div>
                    <div class="clear-checkout">
                        <button class="checkout">Checkout</button>
                        <button class="clear-cart">Clear Cart</button>
                    </div>
                    <div class="cart-total">
                        <strong class="cart-total-title">Total</strong>
                        <span class="cart-total-price">$10.79</span>
                    </div>
                </div>
            </div>
        </form>
        <script>
            let removeCartItemButtons = document.querySelectorAll('.delete-cart');
            for (let i = 0; i < removeCartItemButtons.length; i++) {
    
                let button = removeCartItemButtons[i]
                button.addEventListener('click', removeCartItem)
            }
    
            let quantityInputs = document.querySelectorAll('.quantity-input');
            for (let i = 0; i < quantityInputs.length; i++) {
    
                let input = quantityInputs[i]
                input.addEventListener('change', quantityChanged);
            }
    
            function removeCartItem(event) {
                let buttonCliked = event.target;
                buttonCliked.parentElement.parentElement.remove()
                updateCartTotal()
            }
    
            function quantityChanged() {
    
                let input = event.target;
                if (isNaN(input.value) || input.value <= 0) {
                    input.value = 1;
                }
                updateCartTotal()
            }
    
            function updateCartTotal() {
                let cartItemContainer = document.querySelector('.click-cart');
                let cartRows = cartItemContainer.querySelectorAll('.cart-row');
    
                let total = 0
                for (let i = 0; i < cartRows.length; i++) {
                    let cartRow = cartRows[i]
                    let priceElement = cartRow.querySelector('.shop-price');
                    let quantityElement = cartRow.querySelector('.quantity-input');
    
                    let price = parseFloat(priceElement.innerText.replace('$', ''))
                    let quantity = quantityElement.value
                    total = total + (price * quantity)
                }
                total = Math.round(total * 100) / 100
                document.querySelector('.cart-total-price').innerText = '$' + total;
            }
        </script>
    </body>
    </html>
    

    【讨论】:

    • 是的,现在价格正在更新,但是当我添加 2 个数量并且产品价格为 19.99 美元和另一个数量时,总价应为 39.98 美元,但当您将数量 1 更改为 2 或更多,如果我删除产品总价仍然没有变化?不过好在现在数量会自动更新,只是价格暂时不会更新!
    • 在我的浏览器中工作正常,没有任何问题。可能是你应该清除浏览器缓存点击 ctrl+f5
    • 它现在可以工作了,因为我没有添加“
      ”。您能解释一下为什么添加 id"form1" 和 runat="server" 吗?
    • @RazmikGhookas,请不要只提供“代码转储”(特别是如果其中的大块与问题中的代码相同)来回答。您应该解释为什么如何您提出的代码解决了 OPs 问题,而不是假设他们或稍后查看它的任何其他人能够确定这一点清楚自己
    • @Behar 我编辑了我的答案删除 runat="server" 因为在客户端运行的代码也将 div 元素的类名更改为“cart-row” 请比较我的代码和你的代码
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签