Ir para conteúdo

POWERED BY:

Arquivado

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

wdc_black_

[Resolvido] Atualizar valor em tempo real

Recommended Posts

eai galera, tenho o seguinte código

 

html

<tr>
         <td width="15%" valign="top"><?php echo $id; ?></td>
         <td width="40%" valign="top"><?php echo $nomeproduto; ?></td>
         <td width="15%" valign="top"><input type="text" name="qtd2" value="<?php echo $qtd; ?>" alt="<?php echo $id; ?>" class="alteraqtd" /></td>
         <td width="15%" valign="top"><?php echo number_format($precounitario,2,',','.'); ?></td>
         <td width="15%" valign="top"><input class="precototal" type="text" value="<?php echo number_format($precototal*$qtd,2,',','.'); ?>" /></td>
       </tr>

 

jQuery

$(function() {
$('.alteraqtd').keyup(function(){
	var $this = $(this);
	var alteraQtd = $.post("index.php?S=carrinho", {acao: 'alteraQtd', idcarrinho: $this.attr('alt'), novaqtd: $this.val()}, function(){
		alteraQtd.complete(function(){ 
			precototal = $this.find('.precototal').val()*$this.val();
			alert(precototal);
		});
	});

});
});

 

a parte do post está funcionando corretamente, mas no alert está aparecendo undefined ou NaN,

queria que ao atualizar a quantidade dos produtos, automaticamente ele já alterasse o valor total do produto.

 

alguem tem ideia porque está ocorrendo o problema???

 

agradeço desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa analisar:

 

alert( $this.find('.precototal').val() );
alert( $this.val() );

 

oq retorna de cada alert ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

alert( $this.find('.precototal').val() );

retorna undefined

 

e

 

alert( $this.val() );

retorna 2

 

se eu colocar só

 

$('.precototal').val()

ele retorna corretamente o valor, mas isso só se eu estiver mostrando 1 linha de registro,

se eu colocar em 1 loop, nos outros ele mostra sempre o mesmo valor da primeira linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Okay, então o problema é que você não está buscando esse elemento da forma certa.

 

o .find() vai procurar um filho do elemento que você usou no seletor jQuery.

Por isso, que não está encontrando nada.

 

 

 

tente assim:

alert( $this..parent('td').parent('tr').find('.precototal').val() );

informe o resultado.

 

Entendeu oque fiz ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummm, entendi sim Willian,

eu sabendo que o jQuery reconhece qualquer tag html e mesmo assim não pensei em ir varrendo as tag da table hehehe

 

vlw pela ajuda, problema resolvido ;)

 

 

-----------------------------

 

só mais uma dúdida,

 

var preco = $this.parent('td').parent('tr').find('.precototal').val();
var precototal = preco*$this.val();
alert( precototal );

 

está me retornando NaN, não vejo nada de errado no código,

dei uma olhada em apostilas javascript e não fala nda de muito diferente em multiplicação de variáveis...

 

o que está errado??

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

como estão os valores?

 

você não pode multiplicar, por exemplo:

4,00 * 2

 

por causa da virgula ali. Precisa primeiro converter para . (ponto)

 

além disso, analise oque a função parseFloat() faz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa remover os pontos.

trocar a virgula por ponto.

 

e então usar o parseFloat()

 

 

a função replace() via te ajudar na troca de ponto por nada, e de virgula por ponto.

 

 

 

isso é definição básica de programação cara.

O sistema decimal, segue os padrões americanos. Por isso que essa conversão é necessária.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficou assim willian,

 

function float2moeda(num) {
  x = 0;
  if(num<0) {
     num = Math.abs(num);
     x = 1;
  }
  if(isNaN(num)) num = "0";
     cents = Math.floor((num*100+0.5)%100);
  num = Math.floor(((num*100+0.5)/100)/100).toString();
  if(cents < 10) cents = "0" + cents;
     for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+'.'
              +num.substring(num.length-(4*i+3));
  ret = num + ',' + cents;
  if (x == 1) ret = ' - ' + ret;return ret;
}

$(function() {
$('.alteraqtd').keyup(function(){
	var $this = $(this);
	var alteraQtd = $.post("index.php?S=carrinho", {acao: 'alteraQtd', idcarrinho: $(this).attr('alt'), novaqtd: $(this).val()}, function(){
		alteraQtd.complete(function(){ 
			var preco = $this.parent('td').parent('tr').find('.precounit').text();				
			var preconovo = preco.replace(".","");
			preco = preconovo.replace(",","");
			var precofinal = preco*$this.val();
			$this.parent('td').parent('tr').find('.precototal').text(float2moeda(precofinal));
		});
	});

});
});

 

só tive que achar essa função para transformar novamente em 1.550,00 ;)

 

vlw pelo ajuda,

abraço

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.