1
resposta

IMC ZERADO

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Meu codigo por algum motivo não calcula o imc, alguém consegue me dizer por que?

** Cod.Form **

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

    var nome = document.getElementById("nome");
    var peso = document.getElementById("peso");
    var altura = document.getElementById("altura");
    var gordura = document.getElementById("gordura");

    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.value;
    pesoTd.textContent = peso.value;
    alturaTd.textContent = altura.value;
    gorduraTd.textContent = gordura.value;
    imcTd.textContent = calculaImc(altura.value, peso.value);

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

    var tabela = document.querySelector("#tabela-pacientes");
    tabela.appendChild(pacienteTr);
});
titulo.addEventListener("click", function (){
    console.log("fui clicado");
})

Cod. IMC

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 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 = imc;
    }
}
function calculaImc(peso,altura){
    var imc = 0;

    imc = peso / (altura * altura);

    return imc.toFixed(2);
}
1 resposta

Olá Krisley, tudo bem com você?

Peço desculpas pela demora em lhe responder.

O comportamento apresentado está acontecendo devido aos valores passados para a função calculaImc no arquivo form.js estarem em ordem inversa. A ordem em que passamos os valores no momento em que uma função é chamada gera impacto no momento em que os valores são utilizados dentro da função.

No arquivo calcula-imc.js a função calculaImc() foi declarada da seguinte forma.

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

Note que o primeiro atributo esperado é o peso e o segundo será a altura. Já no arquivo form.js a função é chamada da seguinte forma.

imcTd.textContent = calculaImc(altura.value, peso.value);

Chamando a função como apresentado acima, o valor presente na altura (altura.value) será passado para a variável peso dentro da função e o valor do peso (peso.value) será passado para a variável altura.

A função calculaImc interpreta o primeiro valor como peso e o segundo como altura, e ao realizar os cálculos, o resultado será um número muito pequeno e devido ao uso do método toFixed(2) foi aplicado a regra de arredondamento, deixando apenas 2 números após a vírgula, neste caso 0.00.

Para corrigir o cálculo, basta fornecer os valores na ordem correta no momento da chamada da função calculaImc. No arquivo form.js localize a linha imcTd.textContent = calculaImc(altura.value, peso.value); e substitua-a pela linha abaixo.

imcTd.textContent = calculaImc(peso.value, altura.value);

Após realizar a mudança descrita acima, salve os arquivos e abra o arquivo index.html no navegador. Realize a adição de um novo usuário e verifique se o cálculo do IMC ocorre como esperado.

Espero ter lhe ajudado. Fico à disposição.

Abraços e bons estudos.

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software