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

.tofixed(2) não é uma função

Sempre que tento colocar o .tofixed(2) direto no return calculoImc da função calculaImc(peso,altura), como fez o professor, e tirá-lo de

if(pesoValido && alturaValida) {
    tdImc.textContent = calculoImc.toFixed(2);
  }
}

ele diz que o .tofixed(2) não é uma função. E aí zera os imcs na tabela. Mas se desfaço essa ação e deixo tudo como estava, não dá erro. Por quê?

Quero poder colocar o calculaImc(peso,altura) já com o .tofixed(2) no return calculoImc para que eu possa também calcular os elementos do form sem mil casas decimais.

Eu já havia separado em funções, então meu código está um pouco diferente do da aula. Mas está assim agora:

var titulo = document.querySelector(".titulo"); //eu tenho que buscar o elemento no html para poder modificá-lo

titulo.textContent = ("Aparecida Nutricionista");

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

var paciente;
var tdPeso;
var tdAltura;
var peso;
var altura;
var tdImc;
var calculoImc;
var pesoValido;
var alturaValida;

function calculaImc(peso,altura) {

  calculoImc = peso / (altura * altura);

  return calculoImc;
}

function armazenaImc() {
  tdPeso = paciente.querySelector(".info-peso");
  tdAltura = paciente.querySelector(".info-altura");
  peso = tdPeso.textContent;
  altura = tdAltura.textContent;

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

  calculaImc(peso,altura);
}


function verificaPesoAltura() {

  pesoValido = true;
  alturaValida = true;

  if(peso <= 0 || peso >= 250) {
    pesoValido = false;
    tdPeso.textContent = ("Peso inválido!"); //é necessário modificar o textContent diretamente na var do querySelector e não na var peso = tdPeso.textContent
  }

  if(altura <= 0 || altura >= 3.00) {
    alturaValida = false;
    tdAltura.textContent = ("Altura inválida!"); //é necessário modificar o textContent diretamente na var do querySelector e não na var altura = tdPeso.textContent
  }

  if(pesoValido && alturaValida) {
    tdImc.textContent = calculoImc.toFixed(2);
  }
}

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

    paciente = pacientes[i];

    armazenaImc();

    verificaPesoAltura();
  }
}

mostraImc();

var botaoAdicionar = document.querySelector(".botao-bto-principal");

botaoAdicionar.addEventListener("click", function (event) {
  event.preventDefault(); // impede que a pg recarregue ao enviar as infos do form

  //captar o valor dos inputs
  var form = document.querySelector(".adiciona-info");
  var nome = form.nome.value; //usa-se o name colocado no input
  var peso = form.peso.value;
  var altura = form.altura.value;
  var gordura = form.gordura.value;

  //criar a lista nova
  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);
});
1 resposta
solução!

Atualização: descobri. Tava errando na escrita de toFixed.