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

Uncaught TypeError: Cannot read property 'gordura' of undefined at HTMLButtonElement.<anonymous> (form.js:9)

Estou tendo muitos erros sobre isso, de variável que não é lida. Alguém me ajuda pfvr esse é do calculo

var titulo = document.querySelector(".titulo");
titulo.textContent = "Aparecida Nutrições";

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

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

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

    if (pesoEhValida && alturaEhValida){
        var imc = calculaImc(peso,altura);
    tdImc.textContent = imc;

    }
}

function calculaImc(peso,altura){

    var imc = 0;

    imc = peso / (altura * altura);

    return imc.toFixed(2);

}

e esse é o do Form

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

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

    var paciente = obtemPacienteDoFormulario(form);

    console.log(paciente.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;
    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);

});

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)
    }
}
2 respostas
solução!

Oi Fred, tudo bem?

Perceba que na função function obtemPacienteDoFormulario(form) você não está retornando nenhum valor. Isso significa que quando você executa essa linha: var paciente = obtemPacienteDoFormulario(form); a variável paciente será undefined, já que você não está retornando nada da função.

Sendo assim, a função deve ser ajustada para a seguinte forma:

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;
}

Agora, ele vai retornar o objeto paciente e você vai conseguir guardar esse valor na variável e acessar seus objetos, como gordura.

Espero ter ajudado, qualquer outra dúvida estou a disposição, abraços e bons estudos!

Muito obrigado. Vou ficar mais atento