Desabilitar botão quando o valor ficar negativo

Opa…
Fiz esses dias atrás uma função que concatenava valores e fazia o calculo dos mesmos…
Agora quero fazer com que o botão para fazer o submit fique desabilitado quando o valor virar negativo…
Consegui fazer o código mas só está funcionando com o último valor inserido… ele não funciona com os primeiros.


	function soma() {		
		for (i=0; i<10; ++i)
		{	
			var txtt = document.getElementsByClassName('txtt');
			var txtu = document.getElementsByClassName('txtu');
			var txt =  document.getElementsByClassName('txt');
			var sum = new Array();
				
			$(".txt").each(function() {
			

				if(!isNaN(this.value) && this.value.length!=0) {
					sum[i] = ((txtt[i].value) - (txtu[i].value)) - (txt[i].value);					

					$("#sum"+i).html(sum[i].toFixed(2));
					
				}
                                
                                //aqui é a parte do código mas só está funcionando com o último valor inserido.
				if (sum[i] < 0) {
					$(".ui-dialog-buttonpane button:contains('Aplicar')").button("disable");
				} else {
					$(".ui-dialog-buttonpane button:contains('Aplicar')").button("enable");						 
				}
			}); 
		}	
	}

Pelo que percebi você testa em toda iteração que você faz o cálculo não é isso?

E se a última soma der positiva mas nas somas anteriores existir alguma negativa, o campo continua habilitado não é isso?

Você só pode habilitar ou desabilitar o submit depois de ter passado por todas as somas e não a cada uma.

Crie uma variável que pode servir como contador geral e incremente ou decremente conforme a soma obtida:

function soma() {
    var temSomaNegativa = 0; // entenda-se false nesse caso         
    for (i=0; i&lt;10; ++i)  
    {     
        var txtt = document.getElementsByClassName('txtt');  
        var txtu = document.getElementsByClassName('txtu');  
        var txt =  document.getElementsByClassName('txt');  
        var sum = new Array();  
              
        $(&quot;.txt&quot;).each(function() {  
          
  
            if(!isNaN(this.value) && this.value.length!=0) {  
                sum[i] = ((txtt[i].value) - (txtu[i].value)) - (txt[i].value);                    
  
                $(&quot;#sum&quot;+i).html(sum[i].toFixed(2));  
                  
            }  
                                 
            //aqui é a parte do código mas só está funcionando com o último valor inserido.  
            if (sum[i] &lt; 0) {  
                temSomaNegativa++; 
            } else {  
                temSomaNegativa--;
            }  
        });   
    }

    $('#idSubmit').attr(&quot;disabled&quot;, !temSomaNegativa); // attr é mais pratico
    
}

Numa única linha depois dos laços (somas no caso), você testa o contador, em JavaScript 0, ‘’, false, null e undefined são false, logo se temSomaNegativa estiver zero e eu o inverter com !, o submit será habilitado.

[quote=death]Pelo que percebi você testa em toda iteração que você faz o cálculo não é isso?

E se a última soma der positiva mas nas somas anteriores existir alguma negativa, o campo continua habilitado não é isso?

Você só pode habilitar ou desabilitar o submit depois de ter passado por todas as somas e não a cada uma.

Crie uma variável que pode servir como contador geral e incremente ou decremente conforme a soma obtida:

function soma() {
    var temSomaNegativa = 0; // entenda-se false nesse caso         
    for (i=0; i&lt;10; ++i)  
    {     
        var txtt = document.getElementsByClassName('txtt');  
        var txtu = document.getElementsByClassName('txtu');  
        var txt =  document.getElementsByClassName('txt');  
        var sum = new Array();  
              
        $(&quot;.txt&quot;).each(function() {  
          
  
            if(!isNaN(this.value) && this.value.length!=0) {  
                sum[i] = ((txtt[i].value) - (txtu[i].value)) - (txt[i].value);                    
  
                $(&quot;#sum&quot;+i).html(sum[i].toFixed(2));  
                  
            }  
                                 
            //aqui é a parte do código mas só está funcionando com o último valor inserido.  
            if (sum[i] &lt; 0) {  
                temSomaNegativa++; 
            } else {  
                temSomaNegativa--;
            }  
        });   
    }

    $('#idSubmit').attr(&quot;disabled&quot;, !temSomaNegativa); // attr é mais pratico
    
}

Numa única linha depois dos laços (somas no caso), você testa o contador, em JavaScript 0, ‘’, false, null e undefined são false, logo se temSomaNegativa estiver zero e eu o inverter com !, o submit será habilitado.[/quote]

não …
do jeito que eu fiz JÁ ESTÁ FUNCIONANDO apenas com o ÚLTIMO valor… e não é essa a minha intenção.
Eu quero que seja verificado todos os resultados e se QUALQUER um dos 10 resultados der negativo ele desabilite o submit. seria como se não houvesse saldo para fazer a inserção no banco. Por isso eu estava querendo passar por cada uma das somas.

[quote=skindedo]
não …
do jeito que eu fiz JÁ ESTÁ FUNCIONANDO apenas com o ÚLTIMO valor… e não é essa a minha intenção.
Eu quero que seja verificado todos os resultados e se QUALQUER um dos 10 resultados der negativo ele desabilite o submit. seria como se não houvesse saldo para fazer a inserção no banco. Por isso eu estava querendo passar por cada uma das somas.[/quote]

Mas então pelo que estou entendendo, você possui um botão submit para cada soma?

Pois o exemplo que te mostrei é pra funcionar com um único submit, o que seria o ideal para o comportamento de uma página web, já que um submit trabalha para um formulário e vários são desnecessários, pois se você está pensando que ao clicar no submit de determinada soma ele envia somente aquela, está enganado pois ele envia tudo de uma vez inclusive os negativos.

[quote=death][quote=skindedo]
não …
do jeito que eu fiz JÁ ESTÁ FUNCIONANDO apenas com o ÚLTIMO valor… e não é essa a minha intenção.
Eu quero que seja verificado todos os resultados e se QUALQUER um dos 10 resultados der negativo ele desabilite o submit. seria como se não houvesse saldo para fazer a inserção no banco. Por isso eu estava querendo passar por cada uma das somas.[/quote]

Mas então pelo que estou entendendo, você possui um botão submit para cada soma?

Pois o exemplo que te mostrei é pra funcionar com um único submit, o que seria o ideal para o comportamento de uma página web, já que um submit trabalha para um formulário e vários são desnecessários, pois se você está pensando que ao clicar no submit de determinada soma ele envia somente aquela, está enganado pois ele envia tudo de uma vez inclusive os negativos.[/quote]

o meu está fazendo os cálculos automaticamente.quando a pessoa tecla ele faz o calculo e já mostra o resultado aem um campo ao lado
o que está sendo enviado está correto já…

Consegui aqui mas queria entender como que funcionou agora…

[code]function soma() {         
    for (i=0; i<10; ++i)  
    {     
        var txtt = document.getElementsByClassName('txtt');  
        var txtu = document.getElementsByClassName('txtu');  
        var txt =  document.getElementsByClassName('txt');  
        var sum = new Array();  
              
        $(".txt").each(function() {  
          
  
            if(!isNaN(this.value) && this.value.length!=0) {  
                sum[i] = ((txtt[i].value) - (txtu[i].value)) - (txt[i].value);                    
  
                $("#sum"+i).html(sum[i].toFixed(2));  
                  
            }  
                                 
                               //novo código aqui 
			if ((sum[0] < 0) || (sum[1] < 0) || (sum[2] < 0) || (sum[3] < 0) || (sum[4] < 0) || (sum[5] < 0) || (sum[6] < 0) || (sum[7] < 0) || (sum[8] < 0) || (sum[9] < 0)) {
				$(".ui-dialog-buttonpane button:contains('Aplicar')").button("disable");
			//aqui não era para ficar  else if ((sum[0] > 0)  &&  (sum[1] > 0)  &&  (sum[2] > 0)......)  { ??????????????????????? testei e não funcionou.. mas funcionou com o código abaixo !? o motivo eu não sei
                            } else if ((sum[0] > 0))  {
				$(".ui-dialog-buttonpane button:contains('Aplicar')").button("enable");						 
			}
        });   
    }     
}  

[/code]

esse ficou o resultado final …
se QUALQUER campo ficar negativo o botão de submit é desabilitado.
E
se TODOS os campos ficarem positivos o botão de submit é habilitado.