Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Alguma boa alma poderia <por favor> me explicar com carinho o que está acontecendo?

Olá! Estou começando a programar e não entendo direito como que o JavaScript manipula os seus protótipos. (meu maior problema é que sei o mínimo de inglês...)

Eu acredito que esta pergunta irá ajudar outros alunos (talvez, mas sei que vai me ajudar muito).

ps: já procurei a respeito... por ex:

http://pt.stackoverflow.com/questions/37770/qual-a-diferen%C3%A7a-entre-this-e-this-e-this

Alguém poderia me ajudar explicando (mas por favor, explicando) o que está acontecendo...? Não apenas respondendo "o erro é este" "solucione assim", e sim o por que o erro ocorre ou no mínimo, dizendo qual livro em pt-br eu posso ler para entender. Só para que eu tenha um insight e consiga continuar meus estudos com a mente aliviada.

Desde já agradeço!

Segue a dúvida:

https://jsfiddle.net/RoxVision/wq8dqky9/

3 respostas
solução!

Bom vamos, vou tentar lhe explicar o problema Léo.

O erro do seu código esta na referência que você faz para o this:

//$(this) = window
var $this = $(this);

Esse objeto window é a representação da janela do navegador ou do próprio navegador em si, portanto, quando você chama a função text() ele vai te retornar uma string em branco, após retornar a string você faz o parse dela para float onde isso não existe, por isso ele da o erro NaN, é como se você tivesse convertendo um texto para número.

Não entendi porque você fez: var $this = $(this);

Para corrigir seu problema você deve apagar essa variável e alterar a seguinte linha:

totalB += parseFloat($this.text()); // errado
totalB += parseFloat($(this).text()); // certo

Mas quem é o this ? Nesse caso seria as td's quantidade pois são elas que disparam a função each do jquery, portanto quando fazemos:

$.each(todasQuant, function() {
    // this = cada div que esta dentro de todasQuant
    // quando você chama o .text() irá te retornar 1, ao fazer o parse de 1 para float tudo dará certo pois o mesmo é um numero e não texto
    totalB += parseFloat($(this).text());
});

Geralmente quando usamos o thisdo jquery dentro de alguma função o mesmo será quem a chamou .

Espero ter ajudado

Nooossa!!!

Agora sim entendi! Minha intenção era de criar um atalho para o $(this), a fim de evitar ter que abrir o parentese! E que ao chamar ele (no caso $this) dentro do eacht... ele iria apontar para todasQuant...

hahahahahaha

Eu acreditei que eu iria criar uma referencia para o a "objeto" $(this) mas na verdade eu estava referenciando o ponteiro do this, que no caso apontava para "window" atrelado com o jQuery

Viajei legal...

Mas foi bom! Pois agora entendi o que é que estava rolando...

Muito obrigado pelo seu tempo!

Magina, fico feliz que tenha entendido e dado tudo certo.