减少物品JS

问题描述 投票:0回答:1

我是 JS 的新手,正在为购物车案例而苦苦挣扎。我使用 LocalStorage 来存储产品,一切顺利。

但是当我尝试通过购物车中的按钮减少产品时,第一个产品从页面中逐个删除减少计数点,但之后无法使用其他产品减少按钮。

但是,如果开始减少购物车底部的商品,一切都会顺利。我怎样才能解决这个问题?感谢大家!

我意识到,eksiButtons 值返回的是nodeList,并且它的所有按钮索引号都是从0 开始的,即使其中一个从页面nodeList 中删除,按钮仍然保留在里面。但如果刷新页面节点列表会自行更新负长度。

代码如下

const veri = localStorage.getItem("urunler") // Localden ürünleri çekiyor
let urunler = JSON.parse(veri) // Çekilen ürünleri urunler diye bir değişkene dizi olarak kaydediyor.

const wrapper = document.querySelector(".wrapper") // Sepet Alanını Seçiyor

let itemCount = document.querySelector(".item-count")  // Sepet logoyu seçiyor
let totalPrice = document.getElementById("total-fiyat")

sayiArttir()


for(i of urunler){

    let div = document.createElement('div')
    div.classList.add("row")
    div.innerHTML = 
    `  
        <div class="inner-card  p-4 bg-light rounded border border-secondary g-2">
                        
            <ul class="d-flex justify-content-between align-items-center list-unstyled">
                <li>
                    <div class="foto-cerceve">
                            <img src="../img/t1.avif">
                    </div>
                </li>

                <li>${i.baslik}</li>

                <li class="d-flex justify-content-between align-items-center gap-3">
                
                    <button class="btn btn-secondary btn-sm rounded-pill eksi"">
                        <span class=" text-white rounded-pill align-items-center d-flex justify-content-center align-items-center">-</span> 
                    </button>
                    
                
                <span class="text-warning fs-5"> x<span class="sayi">${i.adet}</span> </span> 
                
                <div class="btn btn-secondary btn-sm rounded-pill arti">
                    <span class=" text-white rounded-pill align-items-center d-flex justify-content-center align-items-center" >+</span> 
                </div>
                
                </li>

                <li>${((i.fiyat)*(i.adet))} TL</li>

                <li class="btn btn-danger btn-md sil">Sil</li>
            </ul>
        </div> 
        </div>

    `
    wrapper.append(div)

    if(i.adet <= 0){
        div.innerHTML = " "
    }
}
// Eksi butonlarını seçmek için bir döngü oluştur

let eksiButtons = document.querySelectorAll('.eksi');

// let eksiBela = Array.from(eksiButtons)
const sayi = document.querySelectorAll('.sayi');
const row = document.querySelectorAll('.row');

eksiButtons.forEach((i, index)=>{
    i.addEventListener("click", function(){
        
        
       
        console.log()


        if((index < urunler.length) && (urunler[index].baslik === i.parentElement.parentElement.children[1].textContent)){
                urunler[index].adet--
                
                if(urunler[index].adet <= 0 )
                {
                   urunler.splice(index, 1);
                    
                }
        
                sayi[index].textContent--
                
                if(sayi[index].textContent <= 0)
                {  
                    row[index].remove();

                }

                
        }  

        localStorage.setItem("urunler", JSON.stringify(urunler))
        sayiArttir()
    })
})
javascript shopping-cart
1个回答
0
投票

您能更详细地描述一下您的问题吗?也许这次提供一个包含 HTML 和 JavaScript 的代码示例,这样我,包括其他听到你的问题的人都可以完全理解这个问题。它不一定是您的实际网站,只需用测试容器替换类,以便我们可以看到问题。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.