Procurei aqui e em outros foruns mas nenhum conseguiu resolver minha dúvida.
Tenho 3 valores que virão de inputs de formulário php e gostaria de fazer a subtração entre um total e dois valores parciais.
A idéia é simples e eu acho que está faltando apenas a sintaxe correta.
function calculateSum() {
for (i=0; i<10; ++i)
{
var sum = 0;
//verificar todos os inputs do tipo
$(".txt"+i).each(function() {
var vtxt = "txt"+i;
var vtxtu = "txtu"+i;
var vtxtt = "txtt"+i;
//verificar se é numero
if(!isNaN(this.value) && this.value.length!=0) {
sum[i] = (((document.form.getElementsByName(vtxtt)[i].className.value -0) - (document.form.getElementsByName(vtxtu)[i].value -0)) - (document.form.getElementsByName(vtxt)[i].value -0) );
}
});
//duas casas decimais
$("#sum"+i).html(sum[i].toFixed(2));
}
}
}
bom … é isso… eu acho que o erro está na parte do " sum[i] = … "
Cara não entendi muito bem qual o cálculo você quer fazer, mas se são apenas três campos/inputs, creio eu não tem necessidade de laço (for nesse caso).
Você consegue pegar os valores tranquilamente:
function soma() {
var total = jQuery('#total').val();
var campo1 = jQuery('#campo1').val();
var campo2 = jQuery('#campo2').val();
if (!isNaN(total) || !isNaN(campo) || !isNaN(campo2)) {
alert('Não posso realizar o cálculo!');
return;
}
var resultado = parseFloat(total) - (parseFloat(campo1) + parseFloat(campo2));
alert('O resultado é: ' + resultado);
}
É mais ou menos isso o que você quer?
Estou usando a função parseFloat para converter o número imaginando ser com casas decimais, mas se você quiser pode usar a função parseInt().
Espero ter ajudado.
[quote=cyborgninja]Cara não entendi muito bem qual o cálculo você quer fazer, mas se são apenas três campos/inputs, creio eu não tem necessidade de laço (for nesse caso).
Você consegue pegar os valores tranquilamente:
function soma() {
var total = jQuery('#total').val();
var campo1 = jQuery('#campo1').val();
var campo2 = jQuery('#campo2').val();
if (!isNaN(total) || !isNaN(campo) || !isNaN(campo2)) {
alert('Não posso realizar o cálculo!');
return;
}
var resultado = parseFloat(total) - (parseFloat(campo1) + parseFloat(campo2));
alert('O resultado é: ' + resultado);
}
É mais ou menos isso o que você quer?
Estou usando a função parseFloat para converter o número imaginando ser com casas decimais, mas se você quiser pode usar a função parseInt().
Espero ter ajudado.[/quote]
É por que são 10 tipos de despesa. e para cada uma das despesas tem 3 campos para que seja realizada a subtração dos 3 valores…
seria :
tipoDespesa1 = ( total - valorParcialA ) - valorParcialB ;
tipoDespesa2 = ( total2 - valorParcialA2 ) - valor parcialB2 ;
tipoDespesa3 = ( total3 - valor parcialA3 ) - valorParcialB3 ;
e assim sucessivamente
E eu preciso de valores com casas decimais, por serem valores monetários. então será usado o parseFloat mesmo.
Você pode colocar uma classe CSS em cada campo, nesse caso como você está usando três tipos (valorParcialA, valorParcialB e total) idenpendentemente da quantidade, depois busca na função soma:
function soma() {
var totais = $('.total');
var valoresParciaisA = $('.valorParcialA');
var valoresParciaisB = $('.valorParcialB');
var totalDosTotais = 0.0;
for (var i = 0; i < totais.length; i++) {
totalDosTotais += parseFloat(totais[i]); // total, total2, total3, etc...
}
var totalValoresParciaisA = 0.0;
for (var i = 0; i < valoresParciaisA.length; i++) {
}
// ... e assim por diante ...
}
Veja se isso te atende, assim você não precisa esquentar a cabeça em concatenar indice ao id de cada campo.
O jQuery também possui a função find(), pesquise a respeito que pode te ajudar.
[quote=paimei]Você pode colocar uma classe CSS em cada campo, nesse caso como você está usando três tipos (valorParcialA, valorParcialB e total) idenpendentemente da quantidade, depois busca na função soma:
function soma() {
var totais = $('.total');
var valoresParciaisA = $('.valorParcialA');
var valoresParciaisB = $('.valorParcialB');
var totalDosTotais = 0.0;
for (var i = 0; i < totais.length; i++) {
totalDosTotais += parseFloat(totais[i]); // total, total2, total3, etc...
}
var totalValoresParciaisA = 0.0;
for (var i = 0; i < valoresParciaisA.length; i++) {
}
// ... e assim por diante ...
}
Veja se isso te atende, assim você não precisa esquentar a cabeça em concatenar indice ao id de cada campo.
O jQuery também possui a função find(), pesquise a respeito que pode te ajudar.[/quote]
os inputs já estão em classe…
o que vc me mostrou vai exibir os totais dos valores separados em 3 campos certo?
segue o código do formulário em php
<form name="form" >
<table align="center">
<?php $ii = 0; ?>
// enquanto existirem os orçamentos propostos ;
<?php while(!$pbudget->EOF) { $ii++ ?>
<tr>
//aqui estão os tipos de orçamentos -->
<th><?php echo $btype[$pbudget->Fields('tipos_de_orcamento')]; ?> </th>
</tr>
<tr bgcolor="#C2C2C2">
<td><b>Valor Total</b></td>
<td><b>Valor Parcial A</b></td>
<td><b>Valor Parcial B</b></td>
<td><b>Valor Restante</b></td>
</tr>
// aqui aparecem os valores.. ;
// Fórmula do resultado ( resultado = (total - valorParcialA) - valorParcialB ) ;
<tr bgcolor="#DADADA">
<td><input class="<?php echo 'total';?>" type="text" value="<?php echo $pbudget->Fields(valorTotal') ?>" disabled="disabled"/></td>
<td><input class="<?php echo 'valorParcialA';?>" type="text" value="0.00" disabled="disabled"/></td>
<td><input class="<?php echo 'valorParcialB';?>" type="text" onkeyup="soma()"/></td>
<td><span id="<?php echo 'resultado';?>">0</span></td>
</tr>
<?php $pbudget->MoveNext(); ?>
<?php } ?>
</table>
</form>
eu não queria aprofundar muito o código pois a idéia é simples e eu não quero acabar confundindo mais ainda a galera
Ae … Consegui…
utilizei a idéia do paimei…
Código final
<script type="text/javascript">
$(document).ready(function(){
$(".valorParcialA").each(function() {
$(this).keyup(function(){
soma();
});
});
function soma() {
for (i=0; i<10;++i)
{
var total = document.getElementsByClassName('total');
var valorParcialB = document.getElementsByClassName('valorParcialB ');
var valorParcialA = document.getElementsByClassName('valorParcialA');
var sum = 0.0;
$(".valorParcialA").each(function() {
if(!isNaN(this.value) && this.value.length!=0) {
sum = ((total[i].value) - (valorParcialB[i].value)) - (valorParcialA[i].value);
$("#sum"+i).html(sum.toFixed(2));
}
});
}
}
});
</script>
<form name="form" >
<table align="center">
<?php $ii = 0; ?>
<?php while(!$pbudget->EOF) { ?>
<tr>
<th><?php echo $btype[$pbudget->Fields('tipos_de_orcamento')]; ?> </th>
</tr>
<tr bgcolor="#C2C2C2">
<td><b>Valor Total</b></td>
<td><b>Valor Parcial B</b></td>
<td><b>Valor Parcial A</b></td>
<td><b>Resultado</b></td>
</tr>
<tr bgcolor="#DADADA">
<td><input class="<?php echo 'total' ?>" type="text" value="<?php echo $pbudget->Fields('valor_total) ?>" disabled="disabled"/></td>
<td><input class="<?php echo 'valorParcialA' ?>" type="text" value="0.00" disabled="disabled"/></td>
<td><input class="<?php echo 'valorParcialB'?>" type="text" /></td>
<td><span id="<?php echo 'sum'.$ii;?>">0</span></td>
</tr>
<?php $ii++ ?>
<?php $pbudget->MoveNext(); ?>
<?php } ?>
</table>
</form>