1
Hello, I have a problem that I have been racking my brain for a long time and I just can’t understand why it happens... In my application I have a cart that so far inserts products normally, does the sum of their values and adds to the total, however, when I try to remove an item from the cart it is simply messing up the total amount
For example, when I remove Tuna which is the first item from the list, it simply subtracts the triplicate value, if I remove the salmon which is the second item from the list, it removes duplicate...
Example removing the Tuna:
The value is negative and on the console it is as if it had been removed 3x with a single click...
In the elements it was deleted correctly until
Follow the codes I used to create the elements, remove and update the total value of the cart when deleted some item:
Creation of items
$(document).ready(function(){
var btnAdcionaCarrinho = $(".btn-adicionar-carrinho");
btnAdcionaCarrinho.click(function(){
adicionaProduto($(this));
totalPedido(buscaItensPedido());
});
});
function adicionaProduto(el){ //adiciona produto ao carrinho
console.log(el);
var nomeProduto = el.parent().find(".titulo-produto");
var qtdProduto = el.parent().find(".qtd-produto").val();
var precoProduto = el.parent().find(".preco-produto").text();
alteraQtdItensCarrinho("add");
buildItemPedido(nomeProduto.text(),qtdProduto,precoProduto);
carrinho.find(".btn-remover-item").click(function(){
console.log($(this));
alteraQtdItensCarrinho("del");
removeProduto($(this));
});
}
function buildItemPedido(nomeProduto,qtdProduto,precoProduto){//cria a linha na tabela contendo as informações sobre o pedido
var novoItem = $("<tr></tr>");
var nomeItem = $("<td></td>").addClass("nome-pedido").text(nomeProduto);
var qtdItem = $("<td></td>").addClass("qtd-pedido").text(qtdProduto);
var qtdPrecoItem = $("<td></td>").addClass("qtd-preco-pedido").text(precoProduto);
var removerItem = $("<td></td>").addClass("remover-item");
var botaoRemover = $("<span></span>").append("<i></i>").addClass("icon-close btn-remover-item");
removerItem.append(botaoRemover);
novoItem.append(nomeItem,qtdItem,qtdPrecoItem,removerItem);
carrinho.append(novoItem);
console.log(novoItem);
console.log(carrinho);
return carrinho;
}
Item removal
function removeProduto(el){// deleta produto do carrinho
var item = el.parent().parent();
var itemPreco = item.find(".qtd-preco-pedido").text();
var itemQtd = item.find(".qtd-pedido").text();
console.log(item,itemPreco,itemQtd);
subtraiValorTotal(itemPreco,itemQtd);
item.remove();
}
Change in total value
function subtraiValorTotal(itemPreco,itemQtd){//diminui o valor total quando um item é removido
// console.log(itemPreco,itemQtd);
var precoItem = parseFloat(removeSifrao(itemPreco).replace(",",".")) * parseInt(itemQtd);
var total = parseFloat(removeSifrao($("#valor-total").text()).replace(",","."));
// console.log(precoItem.toFixed(2));
// console.log(total);
var novoTotal = total - precoItem;
$("#valor-total").text("R$" + novoTotal.toFixed(2).toString().replace(".",","));
}
Good question, I go here in the neighbor to check if he has the HTML so we can reproduce the problem.
– user60252
What do you have in that role
removeSifrao()
?– Sam
It removes the R$ of the order, since when I add some item to the cart it ends up going in string form (example: R$ 40,00) and need to perform calculations and for this it removes through a Regex the R$ and returns me the converted value already to float
– Mateus Moura Forte
As for HTML, it is basically a table without <tr> any, I create them in the buildItemPedido function when I add a product to the cart
– Mateus Moura Forte
He’s got a lot of code flaws.
– Sam