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

O imc dos clientes já adicionados na tabela não são calculados

O calculo do imc dos clientes que já estão no html da página não funciona.

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

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

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 = int(tdAltura.textContent;

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

    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 (pesoEhValido && alturaEhValida) {
        imc = calculaImc(peso,altura);
        tdImc.textContent = imc.toFixed(2);
    }
}
function calculaImc(peso, altura){
    var imc = peso / (altura * altura);
    return imc.toFixed(2);
 }
3 respostas
solução!

Fala aí Felipe, tudo bem? Acho que seu código possuí alguns pequenos problemas.

  1. Na linha 5, você está tentando usar uma variável paciente que não existe. Sugiro removê-la, pois esse código vai estar dentro do for.
  2. Na hora de pegar o valor da altura, você está tentando converter para um inteiro, porém, sua função não está fechando os parentes.

Com algumas correções seu código ficaria assim:

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 = parseInt(tdAltura.textContent, 10);

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

    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 (pesoEhValido && alturaEhValida) {
        imc = calculaImc(peso,altura);
        tdImc.textContent = imc.toFixed(2);
    }
}
function calculaImc(peso, altura){
    var imc = peso / (altura * altura);
    return imc.toFixed(2);
 }

Pode ser que não funcione e ainda tenha alguns erros, não testei o código. Mas, vamos nos falando.

Espero ter ajudado.

Bom dia Matheus, passei um pente fino no meu código e corrigi outros pequenos erros e voltou a funcionar. Agradeço pela ajuda.

Show Felipe, fico feliz que tenha conseguido resolver o problema.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.