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

form.js:46 Uncaught TypeError: Cannot read property 'nome' of undefined. Obs: Não achei o mesmo problema aqui no fórum.

Olá. Meu objeto "paciente" está aparecendo de forma estranha na função "montaTr(paciente)" linha 32. O console.log(paciente) dá linha 33 mostra algo muito estranho no console: {nome: "Nelsinho", peso: "1", altura: "1", gordura: "1", imc: "1.00"} form.js:36 1.00 form.js:36 undefined

Antes de "paciente" entrar na função "montaTr(paciente)" na linha 10, ele se comporta normalmente: {nome: "Nelsinho", peso: "1", altura: "1", gordura: "1", imc: "1.00"}

Não consigo entender porque depois de entrar na função "montaTr(paciente)" como argumento ele se transforma em um objeto e mais duas linhas de informação, como mostrado antes.

Segue meu código form.js:

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

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

    return paciente;
}

function montaTr(paciente) {
    console.log(paciente);


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



    // var nomeTd = document.createElement("td");
    // nomeTd.classList.add("info-nome");
    // nomeTd.textContent = paciente.nome;


    var nomeTd = montaTd(paciente.nome, "info-nome");

    var pesoTd = montaTd(paciente.peso, "info-peso");

    var alturaTd = montaTd(paciente.altura, "info-altura");

    var gorduraTd = montaTd(paciente.gordura, "info-gordura");

    var imcTd = montaTr(paciente.imc, "info-imc");

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

    return pacienteTr;
}

function montaTd(dado, classe) {
    var td = document.createElement("td");
    td.textContent = dado;
    td.classList.add(classe);

    return td;
}
3 respostas

Fazendo testes para descobrir por que isso tá acontecendo cheguei na seguinte situação. Quando eu comento

//var imcTd = montaTr(paciente.imc, "info-imc");

...

//pacienteTr.appendChild(imcTd);

o código funciona sem nenhum erro.

Não tô entendendo por que uma linha depois de onde o console diz que existe erro quando comentada deixa de influenciar num comando anterior a ela.

solução!

Em mais um teste eu comentei a linha

   //var imcTd = montaTr(paciente.imc, "info-imc");

e coloquei essas 3 linhas depois da linha de cima

    var imcTd = document.createElement("td");
    imcTd.textContent = paciente.imc;
    imcTd.classList.add("info-imc");

O código também funcionou sem erro. O problema é na função montaTd(dado, classe) com o paciente.imc. Não sei o porquê dessa função estar influenciando no objeto paciente já no início da função montaTr(paciente).

Edit:

Acabei de perceber que eu estava chamando a função errada em

    var imcTd = montaTr(paciente.imc, "info-imc");

O correto é

var imcTd = montaTd(paciente.imc, "info-imc");

Tentei procurar alguma opção pra deletar o tópico mas não achei. Vou ter que ficar com essa vergonha pela eternidade. kkkkkkkkkkkkkkk