Função para concatenar strings vindas de um formulário php e fazer subtração entre os valores

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 &lt; totais.length; i++) {
      totalDosTotais += parseFloat(totais[i]); // total, total2, total3, etc...
   }


   var totalValoresParciaisA = 0.0;
   for (var i = 0; i &lt; 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 &lt; totais.length; i++) {
      totalDosTotais += parseFloat(totais[i]); // total, total2, total3, etc...
   }


   var totalValoresParciaisA = 0.0;
   for (var i = 0; i &lt; 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


&lt;form name="form" &gt;
	&lt;table align="center"&gt;
        &lt;?php $ii = 0; ?&gt;
        // enquanto existirem os orçamentos propostos ;
        &lt;?php while(!$pbudget-&gt;EOF) {  $ii++ ?&gt;        
        &lt;tr&gt;
                 //aqui estão os tipos de orçamentos --&gt;
        	&lt;th&gt;&lt;?php echo $btype[$pbudget-&gt;Fields('tipos_de_orcamento')]; ?&gt;		&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="#C2C2C2"&gt;
            &lt;td&gt;<b>Valor Total</b>&lt;/td&gt;
            &lt;td&gt;<b>Valor Parcial A</b>&lt;/td&gt;
            &lt;td&gt;<b>Valor Parcial B</b>&lt;/td&gt;
            &lt;td&gt;<b>Valor Restante</b>&lt;/td&gt;
        &lt;/tr&gt;
        // aqui aparecem os valores.. ;
        // Fórmula do resultado  ( resultado = (total - valorParcialA) - valorParcialB ) ;
        &lt;tr bgcolor="#DADADA"&gt;        	
        	&lt;td&gt;&lt;input class="&lt;?php echo 'total';?&gt;" type="text" value="&lt;?php echo $pbudget-&gt;Fields(valorTotal') ?&gt;" disabled="disabled"/&gt;&lt;/td&gt;
        	&lt;td&gt;&lt;input class="&lt;?php echo 'valorParcialA';?&gt;" type="text" value="0.00" disabled="disabled"/&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input class="&lt;?php echo 'valorParcialB';?&gt;" type="text" onkeyup="soma()"/&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span id="&lt;?php echo 'resultado';?&gt;"&gt;0&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;  
		&lt;?php $pbudget-&gt;MoveNext(); ?&gt;
        &lt;?php } ?&gt;   
    &lt;/table&gt;
&lt;/form&gt;

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>