1
resposta

o imc voltou a dar NaN

O imc esta dando NaN novamente e eu não sei qual o erro que eu cometi

form.js:

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

    var form = document.querySelector("#form-adiciona");
    //  extraindo informações paciente form
    var paciente = obtemInformaçõesForm(form);

// Ciea tr e td
 var pacienteTr = montaTr(paciente);

 var erros = validaPaciente(paciente);

 if (erros.length > 0) {
      exibeMensagemDeErro(erros);

     return;
 }

// add paciente na tabela
    var tabela = document.querySelector("#tabela-pacientes");

    tabela.appendChild(pacienteTr);

    form.reset();
   var MensagensDeErro = document.querySelector("#mensagens-erro")
   MensagensDeErro.innerHTML = "";

});

function exibeMensagemDeErro(erros){
    var ul = document.querySelector("#mensagens-erro");
      ul.innerHTML = "";

    erros.forEach(function(erro){
      var li = document.createElement("li");
      li.textContent = erro;
      ul.appendChild(li);
    });
}

function obtemInformaçõesForm(form){

    var paciente = {
        nome:form.nome.value,
        peso:form.peso.value,
        altura:form.altura.value,
        gordura:form.gordura.value,
        imc: calculaImc(form.peso.velue, form.altura.value)
    }
    return paciente;
}

function montaTr(paciente){
    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");


    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 = paciente.nome;
    pesoTd.textContent = paciente.peso;
    alturaTd.textContent = paciente.altura;
    gorduraTd.textContent = paciente.gordura;
    imcTd.textContent = paciente.imc;

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

    return pacienteTr;
}

function validaPaciente(paciente){

    var erros = [];

    if (paciente.nome.length == 0){
    erros.push("O nome não pode ser em branco");
    }

     if (paciente.gordura.length == 0){
        erros.push("A gordura não pode ser em branco");
        }

        if (paciente.peso.length == 0){
            erros.push("O peso não pode ser em branco");
            }

            if (paciente.altura.length == 0){
                erros.push("A altura não pode ser em branco");
                }

    if (!validaPeso(paciente.peso))  erros.push("Peso é invalido");
    if (!validaAltura(paciente.altura))erros.push("Altura é invalida");




    return erros;   
}

CalculaImc.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 tdGordura = paciente.querySelector(".info-gordura");
var gordura = tdGordura.textContent;

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

var pesoEValido = validaPeso (peso);
var alturaEValida = validaAltura (altura);

if(!pesoEValido){
    console.log("peso invalido")
    pesoEValido = false;
    tdImc.textContent = "Peso invalido!"
    paciente.classList.add("paciente-invalido")
}
if(!alturaEValida){
    console.log("Altura invalida")
    alturaEValida = false;
    tdImc.textContent = "Altura invalida!"
    paciente.classList.add("paciente-invalido")
}


if(alturaEValida && pesoEValido){
var imc = calculaImc(peso,altura);
tdImc.textContent = imc;
}

}

function validaPeso(peso) {
    if (peso >= 0 && peso < 500){
        return true;
    }else{
        return false;
    }
}

function validaAltura(altura) {
    if (altura >= 0 && altura < 3.00){
        return true;
    }else{
        return false;
    }
}

function calculaImc(peso, altura){
    var imc= 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2);
}
1 resposta

Olá Vladmir, tudo bem com você?

Peço desculpas pela demora em lhe responder.

O preenchimento da tabela com o valor NaN (Not-A-Numbe) está informando que o resultado da operação não está retornando um número. Esse retorno está acontecendo devido a um erro de digitação no momento em que é passado os parâmetros para a função calculaImc no momento da criação do objeto paciente. O atributo peso foi passando usando a seguinte declaração: form.peso.velue (value foi escrito com 'e' no lugar do 'a') o correto seria: form.peso.value. Da forma que foi declarado não será enviado o valor presente no campo peso do formulário.

Para corrigir o erro apresentado, basta seguir os passos abaixo.

  • Abra o arquivo forms.js
  • Localize a função obtemInformaçõesForm
  • Na variável paciente no momento em que ocorre a declaração do atributo imc, modifique a passagem dos parâmetros para a função calculaImc, deixando-os como abaixo
    imc: calculaImc(form.peso.value, form.altura.value)
  • Salve o arquivo forms.js
  • Abra o arquivo index.html no navegador e adicione um novo paciente utilizando o formulário.

Peço que siga os passos listados acima e verifique se obtém êxito.

Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!