Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por algum motivo, o imc do objeto criado não é calculado(NaN).

Por algum motivo, quando eu estou enxugando o código e passo as propriedades do objeto para criar as

do paciente através da captura das informações do formulário o imc do paciente inserido não é calculado e aparece como NaN. Revi o código algumas vezes e não encontrei onde errei.
//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++){  //responsável por mover dentro da array

  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 pesoEhValido = true;
  var alturaEhValida = true;


  if (peso <= 0 || peso >= 1000){
      console.log("Peso inválido!");
      pesoEhValido = false;
      tdImc.textContent = "Peso inválido!";
      paciente.classList.add("paciente-invalido");
  }

  if (altura <= 0 || altura >= 3.00){
      console.log("Altura inválida!");
      alturaEhValida = false;
      tdImc.textContent = "Altura inválida!";
      paciente.classList.add("paciente-invalido");
  }

  if (alturaEhValida && pesoEhValido) {
    var imc = calculaImc(peso, altura);
    tdImc.textContent = parseFloat(imc);
  }
  else {
      tdImc.textContent = "Altura e/ou peso inválidos!";
  }
}

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

var botaoAdicionar = document.querySelector("#adicionar-paciente")
botaoAdicionar.addEventListener("click", function(event){
    event.preventDefault();
    var form = document.querySelector("#form-adiciona");
// extraindo informações do paciente do form
    var paciente = obtemPacienteDoFormulario(form);
//cria tr e td do paciente
    var pacienteTr = montaTr(paciente);
//colocar o <tr> dentro da tabela no HTML;
    var tabela = document.querySelector("#tabela-pacientes");
    tabela.appendChild(pacienteTr);
  });



//form.js

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

function montaTr(paciente){

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

    var nomeTd = montaTd(paciente.nome,"info-nome");
    var pesoTd = montaTd(paciente.peso,"info-peso");
    var alturaTd = montaTd(paciente.altura,"info-altura");
    var gorduraTd = montaTd(paciente.gordura,"info-gordura");
    var imcTd = montaTd(paciente.imc,"info-imc");

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

    return pacienteTr;

}

function montaTd (dado,classe){
    var td = document.createElement("td");
    td.textContent = dado;
    td.classList.add(classe);
    return td;
}

1 resposta
solução!

Oi, Paulo, tudo bem?

Quando você coloca a altura ou o peso, você põe com vírgula ou ponto? Testei o seu código e tá dando certo, mas se você usar vírgula ao invés de ponto apresenta o NaN.

Espero ter te ajudado!