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

Resultado do IMC está dando valor "NaN"

Quando eu insiro os valores no formulário, o resultado do IMC está dando "NaN". Mas o IMC dos outros pacientes está funcionando corretamente. Não sei o que está acontecendo .

Meu código:

calcula-imc.js

var titulo = document.querySelector(".titulo");
titulo.textContent = "Aparecida Nutricionista";

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

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

    var paciente = pacientes[i];

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

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

    var tdImc = paciente.querySelector(".info-imc");

    var validaPeso = true;
    var validaAltura = true;

    if(peso <= 0 || peso >= 1000){
        console.log("Peso inválido!");
        validaPeso = false;
        tdImc.textContent = "Altura inválida";
        paciente.classList.add("paciente-invalido");
    }
    if(altura <= 0 || altura >= 3.00){
        console.log("Altura inválida!");
        validaAltura = false;
        tdImc.textContent = "Altura inválida!";
        paciente.classList.add("paciente-invalido");
    }
    if(validaPeso && validaAltura){
        var imc = calculaImc(peso, altura);
        tdImc.textContent = imc;
    }
}

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

    return imc.toFixed(2);
}

form.js

var botaoAdicionar = document.querySelector("#adicionar-paciente");

botaoAdicionar.addEventListener("click", function(event){
    event.preventDefault();

    var form = document.querySelector("#form-adiciona");

    // Pega os dados do Form.
    var nome = form.nome.value;
    var peso = form.peso.value;
    var altura = form.altura.value;
    var gordura = form.gordura.value;

    // Cria um Tr
    var pacienteTr = document.createElement("tr");

    // Cria os Tds
    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");

    // Preenche os Tds com os valores inseridos no form.
    nomeTd.textContent = nome;
    pesoTd.textContent = peso;
    alturaTd.textContent = altura;
    gorduraTd.textContent = gordura;
    imcTd.textContent = calculaImc(peso, altura);

    // Coloca os Tds dentro do Tr
    pacienteTr.appendChild(nomeTd);
    pacienteTr.appendChild(pesoTd);
    pacienteTr.appendChild(alturaTd);
    pacienteTr.appendChild(gorduraTd);
    pacienteTr.appendChild(imcTd);

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

    // Trás a Tr pra dentro da tabela de pacientes.
    tabela.appendChild(pacienteTr);

});
    //
6 respostas

Seu algoritmo está retornando o peso e altura como STRING, e não como int. Quando vc manda ele fazer o calculo, os dados que ele captou do formulário não funcionam. Compilei seu código aqui, o que resolveu aqui foi usar o parseInt(). Ficou assim :

    // Pega os dados do Form.
    var nome = form.nome.value;
    var peso = form.peso.value;
    var altura = parseInt(form.altura.value);
    var gordura = parseInt(form.gordura.value);

corrigindo.. faltou coisa ... ele ta colocando na coluna um formato errado. vou continuar olhando aqui. =p

Informe pra gente o que você está digitando no formulário.

solução!
 // Pega os dados do Form.
    var nome = form.nome.value;
    var peso = form.peso.value;
    var altura = parseFloat(form.altura.value);
    var gordura = parseFloat(form.gordura.value);

funcionou. só que na altura, você tem que separar com ponto, não com virgula, se não ele não vai considerar a casa decimal.

Foi isso mesmo, mano! Agora que percebi, eu tava colocando virgula e ele não tá lendo e considerando a casa decimal.

Valeu demais!

se quiser ir alem, você pode até usar

parseFloat('VARIAVEL'.replace(/,/, '.'))

ai ele já substitui pra você "," por "."

Ó! Testei aqui e ficou melhor ainda!

Obrigado, bro! Ajudou bastante! :D