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

Qual o erro?

O console informa que: calcula-imc.js:41 Uncaught ReferenceError: caculaImc is not defined at calcula-imc.js:41 (anonymous) @ calcula-imc.js:41 form.js:45 Uncaught ReferenceError: paicente is not defined at montaTr (form.js:45) at HTMLButtonElement. (form.js:11)

Código abaixo:

CODIGO FORM.JS

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

botaoAdicionar.addEventListener("click", function(event){
    event.preventDefault(); /* ele previne o comportamento padrao, q seria apagar o q escrevi pra enviar para algum lugar*/

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

    var paciente = obtemPacienteDoFormulario(form);

    var pacienteTr = montaTr(paciente);

    /* coloca o tr q acabou de criar dentro da tabela q ja exitia no html*/

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

    tabela.appendChild(pacienteTr);

    form.reset();

});

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){

  /*cria elementos no html*/
  var pacienteTr = document.createElement("tr"); /*criando um tr*/
  pacienteTr.classList.add("paciente");

  pacienteTr.appendChild(montaTd(paciente.nome, "info-nome"));
  pacienteTr.appendChild(montaTd(paciente.peso, "info-peso"));
  pacienteTr.appendChild(montaTd(paicente.altura, "info-altura"));
  pacienteTr.appendChild(montaTd(paciente.gordura, "info-gordura"));
  pacienteTr.appendChild(montaTd(paciente.imc, "info-imc"));

  return pacienteTr;
}

function montaTd(dado, classe){

  var td = document.createElement("td");
  td.textContent = dado;
  td.classList.add(classe);

  return td;

}



CODIGO CALAULA-IMC.JS



    var titulo = (document.querySelector('.container'));
    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 pesoValido = true;
    var alturaValida = true;

    if(peso <= 0 || peso >= 1000){
        console.log("Peso inválido");
        pesoValido = false;
        tdImc.textContent = "PESO INVÁLIDO";
        paciente.style.backgroundColor = "red"; /* outra forma de alterar  o css, mas é mais manual e nao é o jeito melhor de fazer...melhor fazer abaixo*/ 
    }

    if(altura <= 0 || altura >= 3.00){
        console.log("Altura inválida");
        alturaValida = false;
        tdImc.textContent = "ALTURA INVÁLIDA";
        paciente.classList.add("paciente-invalido"); /* adicionou ao css essa classe e manipula pelo csss*/
    }

   if(alturaValida && pesoValido){

        var imc = caculaImc(peso, altura);

        tdImc.textContent = imc;
   }

  }

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

      imc = peso / (altura*altura);

      return imc.toFixed(2); /* limita o numero de casas*/

  }
1 resposta
solução!

Oi, Ana Flavia! Tudo bem?

A mensagem Uncaught ReferenceError: paicente is not defined at montaTr (form.js:45) at HTMLButtonElement. (form.js:11) parece ocorrer por conta da terceira chamada do pacienteTr na função montaTr(paciente). Houve uma falha de digitação na palavra "paciente", ficando "paicente":

pacienteTr.appendChild(montaTd(paicente.altura, "info-altura"));

Quanto às mensagens iniciais, sobre a calculaImc(peso, altura), você consegue conferir no seu arquivo HTML se a src do script em que se encontra a função calculaImc(peso, altura) está com o caminho correto do arquivo? Como exemplo, o meu está desta maneira (mas acredito que avancei algumas aulas em relação ao seu código atual):

<script src= "js/calcula-imc.js"></script>

Bons estudos! :)