Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tiago j.a

[Resolvido] Alterar ordem ao calcular

Recommended Posts

Boa tarde pessoal!

Tenho um script, onde seleciono uma opção, ele me da o preço num textbox, dai coloco a quantidade, e quando pressiono TAB, ele já insere o subtotal e o total dos produtos produto.Só que se altero manualmente o preço unitário, ele não altera o subtotal.

O scirpt é este:

$(function() {
            var calculaTotal = function(){
                total = 0;
                $('.selectInstrumento').parent().parent().each(function(i, e){
                    tdsRow = $(e).find('td');
                    value  = $(tdsRow[3]).find('input').val();
                    if(!isNaN(value)){
                        total += Number(value);
                    }
                });
                $("input[name='total']").val(total.toFixed(2));
            }
			
       var calculaLinha = function(pInputRow){
                row  = $(pInputRow).parent().parent();
                tdEl     = $(row).find('td');
                qtd      = Number($(tdEl[1]).find('input').val());
                unit     = Number($(tdEl[2]).find('input').val());
                subTotal = 0;
                if(!isNaN(qtd) && !isNaN(unit)){
                    subTotal = qtd * unit;
				}
                $(tdEl[3]).find('input').val(subTotal.toFixed(2));
                calculaTotal();
            }

Tentei trocar já a ordem deles, mas não adiantou.

Alguém poderia me ajudar?

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa então, no campo do 'preço unitário', disparar outra função, que realize o cálculo novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$('.selectInstrumento').parent().parent().each(function(i, e){
É este trecho de código que diz qual será o ponto de partida né?

Seria uma função parecida com esta que enviei, só que ao invés de enviar os dados para uma pagina, realizaria a conta neste função mesmo.

Isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, simplifica.

 

Você disse que escolhe algo num menu, logo use o evento change() sobre um seletor desse menu dropdown, pelo ID. Isso de parent(), nesse seu caso, parece gambiarra.

 

Daí o valor vai para o campo text que quando você aperta o TAB faz algo. Esse faz algo ocorre porque o evento blur() foi disparado, logo você pode fazer um seletor duplo, com o ID do campo text E o do preço unitário, com o mesmo evento blur(), que calcula e atualiza o preço:

 

$( '#textbox, #text_do_preco' ).blur( function() { //... } );
Veja se te ajuda, ou pelo menos te dá uma luz.

 

P.S.: Colocar um link e/ou HTML facilitaria nossas conclusões http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse parent(), eu estou utilizando, pq tenho vários select´s, ou seja, tenho 5 select´s por exemplo, e quando seleciono uma opção, ele tem que me dar o preço naquela mesma linha do produto que foi selecionado.

 

var calcTotal = function(){
               $('.custo_unitario').parent().parent().each(function(i, e){
                    var pre_total = 0;
					valor  = $(tdsRow[3]).find('input').val();
                    if(!isNaN(value)){
                        pre_total += Number(valor);
                    }
                });
                $("input[name='total']").val(pre_total.toFixed(2));
            }
$(document).ready(function(){
    $("input[name='custo_unitario']").change(function(){
		  var custo = $(tdEl[2]).find('input').val();
          var quantidade =  $(tdEl[1]).find('input').val();
          var soma = quantidade * custo;
		  $(tdEl[3]).find('input').val(soma.toFixed(2));
		  calcTotal();
    });
});

Coloquei esta função aqui, ele já está alterando certinho os preços, e enviando para os dois campos, só que o campo do total lá em cima, ele está atualizando só quando seleciono o produto.

Como posso fazer para que no momento que trocar o sub_total, ele já altere o total também?

Abraços

 

Estou tentando ver o erro no firebug, ele me diz que a referência não está definida a propriedade pre_total, desta forma que estou fazendo:

var calcTotal = function(){
			   $('.custo_unitario').parent().parent().each(function(i, e){
					tds = $(e).find('td');
					valor_sub  = $(tds[3]).find('input').val();
					alert(valor_sub);
					pre_total += valor_sub;
                 $("input[name='total']").val(pre_total);
				});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso porque nesse código pre_total não existe com um valor anterior.

 

Posta seu HTML (em link online) que fica mais fácil de identificar seu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, consegui fazendo desta forma:

var calcTotal = function(){
			   pre_total = 0;
			   $('.custo_unitario').parent().parent().each(function(i, e){
					tds = $(e).find('td');
					valor_sub  = $(tds[3]).find('input').val();
					pre_total += Number(valor_sub);
                 $("input[name='total']").val(pre_total);
				});
}

$(document).ready(function(){
    $('.custo_unitario').change(function(){
		  var custo = $(tdEl[2]).find('input').val();
          var quantidade =  $(tdEl[1]).find('input').val();
          var soma = quantidade * custo;
		  $(tdEl[3]).find('input').val(soma.toFixed(2));
		  calcTotal();
    });
});

Caso tenha algum erro, ou alguma dica de "melhorias", agradeço!!!

Abraços amigo, e obrigado pela mãoO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.