Hello, I have a problem, in the code below I have a product table, where they have a value (R $) and an input for the customer to choose a quantity. I need that when the customer changes the quantity, it is multiplied by the value of the product and is shown in the total value field (element in the footer of the page).
This function is already working, however, only for the first item in the product list, that is, from the moment that I change the quantity of the first item, it is multiplied by the value and the total value field is updated, but when the next amount is set the total value field is not updated.
I do not know what is wrong, if anyone can help, thank you very much, follow code: To save page, I left out the header where I refer to JS files and other documents.
Table: Product Value Quantity
<tr id="produto">
<td><?=$produto['nomeProduto'] ?></td>
<td><div id="valor"><?=$produto['valorProduto']?></div></td>
<td>
<input id="quantidade" type="number" size="1" maxlength="2" max="10" min="0" step="0">
</td>
</tr>
<?php
endforeach;
?>
</table>
<footer>
<nav class="navbar navbar-default navbar-fixed-bottom">
<label> Total: </label>
<div id="total" class="navbar-right">
R$ 0,00
</div>
</nav>
</footer>
Functions:
function dinheiroTextoParaFloat(text) { //"Transofram" em float.
var limpaTexto = text.replace("R$", "").replace(",", ".");
return parseFloat(limpaTexto);
}
function floatParaDinheiroTexto(value) { //"Transforma" em texto.
var text = (value < 1 ? "0" : "") + Math.floor(value * 100);
text = "R$ " + text;
return text.substr(0, text.length - 2) + "," + text.substr(-2);
}
function leTotal() {
var total = $("#total").text(); //Le o texto do elemento com ID total.
return dinheiroTextoParaFloat(total); //Retorna o texto convertido em float.
}
function escreveTotal(value) {
var text = floatParaDinheiroTexto(value); //Armazena na variavel text o valor convertido em texto.
$("#total").text(text); //escreve o total no elemento com id total.
}
function calculaTotalProdutos(){
var produtos = $("#produto");
var totalProdutos = 0;
for (var cont = 0; cont < produtos.length; cont++){
var $produto = $(produtos[cont]);
var quantidade = dinheiroTextoParaFloat(
$produto.find("#quantidade").val());
var valor = dinheiroTextoParaFloat(
$produto.find("#valor").text());
var subtotal = quantidade * valor;
totalProdutos += subtotal;
}
return totalProdutos;
}
$(document).ready(function() {
$("#quantidade").change(function() {
escreveTotal(calculaTotalProdutos());
});