3
respostas

[Dúvida] Limpando o Carrinho

O valor continua salvo mesmo depois de limpar a lista e continua a soma

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeCodigo inteiro

let totalGeral = 0;
limpar();

function adicionar() {
    let produto = document.getElementById('produto').value;
    let nomeProduto = produto.split('-')[0];
    let valorProduto = produto.split('R$')[1];
    let quantidade = document.getElementById('quantidade').value;
    
    let preco = quantidade * valorProduto;
    let carrinho = document.getElementById('lista-produtos');
    carrinho.innerHTML = carrinho.innerHTML + `<section class="carrinho__produtos__produto">
          <span class="texto-azul"> ${quantidade}x</span> ${nomeProduto} <span class="texto-azul">R$${preco}</span>
  </section>`;

  totalGeral = totalGeral + preco;
  let campoTotal = document.getElementById('valor-total');
  campoTotal.textContent = `R$ ${totalGeral}`;
  document.getElementById('quantidade').value = 0
}

function limpar() {
    let totalGeral = 0;
    document.getElementById('lista-produtos').innerHTML = '';
    document.getElementById('valor-total').textContent = 'R$ 0';

}
3 respostas

Bom dia, Mateus.

Muito bom o código.

Seu erro está nessa linha:

function limpar() {
    let totalGeral = 0;  // Essa linha
    document.getElementById('lista-produtos').innerHTML = '';
    document.getElementById('valor-total').textContent = 'R$ 0';

}

Ao utilizar o let dentro de uma funnção, você cria essa variável no escopo local da função ao invés de usar a que está definida no escopo externo.

Ademais, parabéns pelo código, e pelo estilo muito bem definido. Contudo, é importante o rigor no estilo do código. Se tem ; no final dos comandos, deve ter em todos. Ou então, não colocar em nenhum.

Retirei o *let totalGeral = 0; * mas o erro contiunua. Ele não apaga do histórico a quantidade que tinha.

function limpar() {
    
    document.getElementById('lista-produtos').innerHTML = '';
    document.getElementById('valor-total').textContent = 'R$ 0';

}

Bom dia, Mateus.

Remover o let totalGeral = 0; não resolve, pois a variável global continua inalterada.

Para corrigir, você deveria tirar somente o let, deixando totalGeral = 0;, modificando assim, a variável de escopo global.

Sugiro revisitar as questões de escopo de variável em seus estudos.

Parabéns pelos estudos contínuos, continue avançando!