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

Cannot read property "nome" of undefined

Olá!

Eu estou tendo um problema com o meu Java Script, na parte de "enxugar" o código da Aparecida Nutrição, fiz todas as coisas pedidas pelo professor, mas o meu console sempre dizia o mesmo erro:

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

Depois de reler o erro e o meu código, pela minha interpretação do erro o meu navegador não consegue ler a minha variável "paciente" mesmo ela sendo bem explicada e usada várias vezes no meu código, alguém pode me explicar o meu erro? Esse é o meu form.js

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

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

    var paciente = obtemPacienteDoFormulario(form);

    var pacienteTr = montaTr(paciente);

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

    function montaTr(paciente){
    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");

    pacienteTr.appendChild(montaTd(paciente.nome,"info-nome"));
    pacienteTr.appendChild(montaTd(paciente.peso,"info-peso"));
    pacienteTr.appendChild(montaTd(paciente.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 montaTd;
}
1 resposta
solução!

Oi, Eugênio, tudo bem?

A sua função obtemPacienteDoFormulario está sem retorno, precisamos definir qual o retorno, para que quando seja chamada essa função seja retornado um valor, nesse caso, return paciente, ficando dessa 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;
    }

Testa e me fala se deu certo!