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

IMC não calcula mais

Olá, boa noite!

Minha dúvida é referente a aula 5 melhorar o código. Antes meu IMC calculava depois que alterei ele de dentro e fiz uma função ele não calcula mais.

Na minha opinião amadora ele não está conseguindo encontrar o peso e altura para realizar o código pois ambas variáveis estão dentro da função addEventListener, mas o professor conseguiu, onde estou errando?

Código JavaScript para calcular o IMC:

var pacientes = document.querySelectorAll(".paciente");

for(var i = 0; i < pacientes.length; i++){

    var paciente = pacientes[i];

    var peso = paciente.querySelector(".info-peso");
    tdPeso = peso.textContent;
    var altura = paciente.querySelector(".info-altura");
    tdAltura = altura.textContent;
    var infoImc = paciente.querySelector(".info-imc");


    pesoEhValido = true;
    alturaEhValida = true;

    if(tdPeso >= 1000 || tdPeso <= 0) {
        pesoEhValido = false;
        infoImc.textContent = "Peso Inválido"
        paciente.classList.add("paciente-invalido");
    }

    if(tdAltura >= 5.00 || tdAltura <= 0) {
        alturaEhValida = false;
        infoImc.textContent = "Altura Inválida"
        paciente.classList.add("paciente-invalido");
    }

    if(pesoEhValido && alturaEhValida) {
        infoImc.textContent = calculaImc();
    }
}

function calculaImc(peso, altura) {
    var imc = 0

    imc = peso / (altura*altura);

    return imc.toFixed(2);
}

E código do formulário:

var botao = document.querySelector("#adicionar-paciente");
botao.addEventListener("click", function(event) {
    event.preventDefault();
    var form = document.querySelector("#form-adiciona");

    var nome = form.nome.value;
    var peso = form.peso.value;
    var altura = form.altura.value;
    var gordura = form.gordura.value;

    var pacienteTr = document.createElement("tr");

    var nomeTd = document.createElement("td");
    var pesoTd = document.createElement("td");
    var alturaTd = document.createElement("td");
    var gorduraTd = document.createElement("td");
    var imcTd = document.createElement("td");

    nomeTd.textContent = nome;
    pesoTd.textContent = peso;
    alturaTd.textContent = altura;
    gorduraTd.textContent = gordura;
    imcTd.textContent = calculaImc(peso, altura);

    pacienteTr.appendChild(nomeTd);
    pacienteTr.appendChild(pesoTd);
    pacienteTr.appendChild(alturaTd);
    pacienteTr.appendChild(gorduraTd);
    pacienteTr.appendChild(imcTd);

    var tabela = document.querySelector("#tabela-pacientes");

    tabela.appendChild(pacienteTr);

})

Obrigado antecipadamente pelo retorno.

5 respostas

Boa noite tudo bem ? Faltou você colocar o parametro dentro da função para ele receber o valor para poder calcular


    if(pesoEhValido && alturaEhValida) {
        infoImc.textContent = calculaImc(peso, altura);
    }

Espero que tenha ajudado :D

Olá, Paulo! Tudo bem?

Realmente este detalhe estava faltando, inseri os parametro e ainda assim quando carrego a página todos os meus IMC estão como NaN. Tem mais alguma dica?

Desde já obrigado por toda ajuda.

Boa noite,

ainda estou no aguardo da resolução deste problema, não consegui prosseguir com as próximas aulas devido a este erro que não solucionei.

solução!

Bom dia desculpa a demora, dei uma olhada no seu código e já achei o erro usando o console.log(), na função calculaImc()

if(pesoEhValido && alturaEhValida) {
        infoImc.textContent = calculaImc(peso, altura);
}

Está recebendo a variavel peso e altura e essas variaveis não está vindo o valor dos campos e sim o elemento

var peso = paciente.querySelector(".info-peso");
var altura = paciente.querySelector(".info-altura");

Para poder pegar o valor usa o textContent usado na linha de baixo

    tdPeso = peso.textContent;
    tdAltura = altura.textContent;

Onde só retorna o valor do elemento. Assim se você trocar o na função o peso e altura por tdPeso e tdAltura vai funcionar

if(pesoEhValido && alturaEhValida) {
        infoImc.textContent = calculaImc(tdPeso, tdAltura);
}

Espero te ajudado agora ;D

Paulo, boa noite!

Muito obrigado pelo retorno, consegui entender a sua lógica e realmente estavam invertidos tanto o peso pra TdAltura quanto a altura para a TdAltura. Fiz as alterações e consegui fazer calcular.

Muito obrigado por toda ajuda.