2
respostas

Dúvida criação de sistema de carrinho de compras

Estou criando um sistema de carrinho de compras para um site de e-commerce ficticio, porém estou com um problema. Eu consegui fazer que todo produto que eu clico é adicionado ao cart(array), porém, ele não está pegando os valores dos produtos, e sim sempre o valor 13, que é do primeiro produto da lista.

Eu tentei fazer dois forEach, mas não deu certo.

let product = document.querySelectorAll(".icone");
let cartTotal = document.querySelector(".icone-login");
let productPrice = document.querySelector("#price");


cartTotal = [];

product.forEach(iconCart => {
    iconCart.addEventListener("click", function(event){
        event.preventDefault();

         let price = document.getElementById("price");
        cartTotal.push(parseFloat(price.innerText.replace("R$", "")));
        console.log(cartTotal);


    });

});

HTML

<div class="container">

    <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
            <p id="price">R$13.00</p>
        </div>

            <div class="produto">
                <a href="" class="icone"></a>
                <div id="produto-background"></div>
                <p></p>
                    <p id="price">R$5.00</p>
            </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$25.00</p>
        </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$50.00</p>
        </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$18.00</p>
        </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$36.00</p>
        </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$66.00</p>
        </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$21.00</p>
        </div>

        <div class="produto">
            <a href="" class="icone"></a>
            <div id="produto-background"></div>
            <p></p>
                <p id="price">R$41.00</p>
        </div>


    </div>
2 respostas

Vitor, boa tarde!

Isso está ocorrendo pois o atributo id é único na página toda, se o #price vai se repetir é melhor usar classes ao invés, desse jeito você consegue pegar todos, não se esqueça também de usar o document.querySelectorAll() ao invés do document.querySelector()

Espero ter ajudado e bons estudos!

Boa tarde Felipe, fiz a substituição do id pela classe aqui, e coloquei o querySelectorAll na variavel price mas tá dando esse erro:

Cannot read property 'replace' of undefined

Tentei fazer outro forEach aqui, porém ele está retornando o valor de todos os .price. Como eu faria para imprimir apenas o valor do item em que eu cliquei?

product.forEach(iconCart => {
    iconCart.addEventListener("click", function(event){
        event.preventDefault();

         let price = document.querySelectorAll(".price");


//Segundo forEach

         price.forEach(function(price){

            cartTotal.push(parseFloat(price.textContent.replace("R$", "")));


        });


        console.log(cartTotal);



    });

});

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software