Boa tarde,
Preciso fazer a soma dos campos de uma tabela e exibir em um campo o Valor total.
Segue HTML
<div class="row">
<div class="form-group col-md-4">
<button type="button" class="btn btn-primary" name="btn_addDespesa" id="btn_addDespesa" onclick="wdkAddChild('tableDespesas');">Adicionar
Despesa</button>
</div>
</div>
<div class="row">
<table class="table" id="tableDespesas" tablename="tableDespesas" noaddbutton="true">
<thead>
<tr>
<th width="20%">Data</th>
<th width="50%">Tipo Gasto</th>
<th width="20%">Valor</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input name="sol_txt_gasto_data" type="text" class="form-control sol_txt_gasto_data date" id="sol_txt_gasto_data" placeholder="data" />
</td>
<td>
<input name="sol_txt_gasto_tipoGasto" type="text" class="form-control" id="sol_txt_gasto_tipoGasto" placeholder="Tipo Gasto"/>
</td>
<td>
<div class="input-group">
<div class="input-group-addon">R$</div>
<input type="text" class="form-control" name="txt_valor" id="txt_valor" onchange="somaProdutos()" />
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="row">
<div class="form-group col-md-3">
<label for="txt_valorTotal">Valor Total</label>
<input type="text" class="form-control" name="txt_valorTotal" id="txt_valorTotal" readonly />
</div>
</div>
SCRIPT
function somaProdutos() {
var soma = 0;
var valor = $("input[id^='txt_valorProduto___']").each(function(index,value){
$(this).val();
});
for (i=0; i< valor.length; i++){
soma += parseFloat($(valor[i]).val());
soma + valor
}
console.log(soma);
document.getElementById('txt_valorTotal').value = soma.toLocaleString('pt-br', {minimumFractionDigits: 2});
}
O QUE OCORRE? Quando o campo faz a soma com valores pequenos, ele soma corretamente. Quando eu coloco um valor igual ou maior que 1.000, ele faz uma soma errada dos valores. Também preciso refazer a soma dos valores, toda vez que é excluída uma linha da tabela.
Podem me ajudar?
Esses valores têm separadores de milhar? Usam vírgula como decimal? Valores com máscara costumam ter problemas.
— Mausim 14 de Sep de 2020@mausim Tem sim!
— Karina Pinheiro 14 de Sep de 2020