Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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á
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.
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 ?
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
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.
coloquei a parseFloat() e me retornou 3.1,
existe algum função nativa de javascript para voltar para 3.100,00
ou preciso criar um função??
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.
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
precisa analisar:
oq retorna de cada alert ?