Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O script abaixa realiza soma de vários campos input (campoValor), mas o valor decimal esta incorreto, aonde é 9.11 fica 9.1. Como corrigir?
<script type="text/javascript">
$(function() {
$(this).keypress(function() {
var num = 0;
$(".campoValor").each(function() {
num += parseFloat($(this).val());
});
$(" .total ").val(num);
});
});
</script><?php
for($i=1;$i<=12; $i++)
{
echo "<input type='text' class='campoValor' value='0.00' style='border:0px;text-align:right;border:1px solid blue;'/><br>";
}
echo "<hr style='width:150px;margin-left:0px;'><br><input type='text' class='total'/>";
?>O script abaixa realiza soma de vários campos input (campoValor), mas o valor decimal esta incorreto, aonde é 9.11 fica 9.1. Como corrigir?
<script type="text/javascript">
$(function() {
$(this).keypress(function() {
var num = 0;
$(".campoValor").each(function() {
num += parseFloat($(this).val());
});
$(" .total ").val(num);
});
});
</script>
<?phpfor($i=1;$i<=12; $i++)
{
echo "<input type='text' class='campoValor' value='0.00' style='border:0px;text-align:right;border:1px solid blue;'/><br>";
}
echo "<hr style='width:150px;margin-left:0px;'><br><input type='text' class='total'/>";
?>Cara, não vi erro e não consegui simular aqui.
Preenchi os campos e somou corretamente. Quais valores vc usou ?
9.11+9.11+9.11 = 27,33 e dá 27,32
Ahh sim!
Na verdade, o problema/erro é o evento que vc está usando.
troque para .keyup(function() {
.keyup -> é executado assim que a tecla é levantada(logo após vc digitar)
.keypress, .keydown -> são executados quando a tecla baixa, ou seja, só vai somar o último dígito depois que vc digitar o próximo.
Entendeu ?
Segue resultado final:
<script src="[url=[http://code.jquery.com/jquery-1.11.0.min.js](http://code.jquery.com/jquery-1.11.0.min.js)][http://code.jquery.com/jquery-1.11.0.min.js](http://code.jquery.com/jquery-1.11.0.min.js)"></script>[/url]
<script>
function moeda(z){
v = z.value;
v=v.replace(/\D/g,"") //permite digitar apenas números
v=v.replace(/[0-9]{18}/,"inválido") //limita pra máximo 999.999.999,99
v=v.replace(/(\d{1})(\d{11})$/,"$1.$2") //coloca ponto antes dos últimos 11 digitos
v=v.replace(/(\d{1})(\d{8})$/,"$1.$2") //coloca ponto antes dos últimos 8 digitos
v=v.replace(/(\d{1})(\d{5})$/,"$1.$2") //coloca ponto antes dos últimos 5 digitos
v=v.replace(/(\d{1})(\d{1,2})$/,"$1,$2") //coloca virgula antes dos últimos 2 digitos
z.value = v;
}
</script>
<script type="text/javascript">
$(function() {
$( "input" ).focus(function(){
$(this).val(' ');
});
$(this).keyup(function() {
var num = 0;
$(".campoValor").each(function() {
num += parseFloat($(this).val().replace('.','').replace(',','.'));
});
$(" .total ").val(num).toFixed(3);
});
});
</script>
<?php
for($i=1;$i<=12; $i++)
{
echo "<input type='text' class='campoValor' value='0.00' style='border:0px;text-align:right;border:1px solid blue;' onKeyUp='moeda(this);'/><br>";
}
echo "<hr style='width:150px;margin-left:0px;'><input type='text' class='total'/>";
?>
Poste o html tb para simularmos.