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

Uncaugth TypeError: Cannot read property 'pegaImc' of undefined

O código funcionou normalmente, mas no console há o erro acima. Não entendi o que é.. Poderiam me ajudar? O erro é :

calcula-imc.js:14 Uncaught TypeError: Cannot read property 'pegaImc' of undefined(anonymous function) @ calcula-imc.js:14percorreArray @ percorre.js:5(anonymous function) @ calcula-imc.js:10

O código é :

// peso / altura * altura



var trsPacientes = document.getElementsByClassName("paciente");

var posicaoAtual = 0;
percorreArray(trsPacientes, imprimeEModificaTdDeImc);

percorreArray(trsPacientes, function(pacienteTr) {

    var pacienteTr = trsPacientes[posicaoAtual];

    var imc = pacienteAtual.pegaImc();

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    var pacienteAtual = montaPaciente(pacienteTr);
    tdImc.textContent = imc;

    console.log(imc);
});
function montaPaciente(pacienteTr) {
    var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];
    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];

    var pacienteAtual = {
        "nome": tdNome.textContent,
        "peso": tdPeso.textContent,
        "altura": tdAltura.textContent,
        "pegaImc": function() {
            if (this.altura != 0) {
                var imc = this.peso / (this.altura * this.altura);
                return imc;
            } else {
                console.log("não executei");
            }
        }
    }
    return pacienteAtual;
}
function imprimeEModificaTdDeImc(pacienteTr){

    var pacienteAtual = montaPaciente(pacienteTr);    
    var imc = pacienteAtual.pegaImc();

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0]; 
    tdImc.textContent = imc;

    console.log(imc);
}
4 respostas

Oi Nikolai, tudo certo?

Posta seu HTML para darmos uma olhada também?

Abcs!

Opa, sim

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Meus pacientes</title>
        <link rel="stylesheet" type="text/css" href="reset.css">
        <link rel="stylesheet" type="text/css" href="alura.css">
    </head>
    <body>
        <header>
            <div class="container">
                <h1>Meus pacientes</h1>
            </div>
        </header>
        <main class="container">
            <section>
                <h2>Meus pacientes</h2>
                <table>
                    <tr>
                        <th>Nome</th>
                        <th>Peso(kg)</th>
                        <th>Altura(m)</th>
                        <th>IMC</th>
                    </tr>
                    <tr class="paciente">
                        <td class="info-nome">Leonardo</td>
                        <td class="info-peso" id="peso-1">57</td>
                        <td class="info-altura" id="altura-1">1.67</td>
                        <td class="info-imc" id="imc-1"></td>
                    </tr>
                    <tr class="paciente">
                        <td class="info-nome">Paulo</td>
                        <td class="info-peso" id="peso-2">100</td>
                        <td class="info-altura" id="altura-2">2.00</td>
                        <td class="info-imc" id="imc-2"></td>
                    </tr>
                </table>
                <button id="calcula-imcs" class="botao ">Calcular Imcs</button>
            </section>
            <section>
                <h2>Adicionar novo paciente</h2>    
                <form>
                    <fieldset>
                        <label for="nome">Nome:</label>
                        <input id="campo-nome" type="text" placeholder="digite o nome do seu paciente">
                    </fieldset>
                    <fieldset class="campo-medio">
                        <label for="peso">Peso:</label>
                        <input id="campo-peso" type="text" placeholder="digite o peso do seu paciente">
                    </fieldset>
                    <fieldset class="campo-medio">
                        <label for="altura">Altura:</label>
                        <input id="campo-altura" type="text" placeholder="digite a altura do seu paciente">
                    </fieldset>
                    <button id="adicionar-paciente" class="botao bto-principal">Adicionar</button>
                </form>
            </section>
        </main>
        <script src="percorre.js"></script>
        <script src="imprimi-nome.js"></script>
        <script src="calcula-imc.js"></script>
        <script src="muda-de-cor.js"></script>
    </body>
</html>
solução!

Olá Nikolai,

percebi que você chamou o pacienteAtual.pegaImc() antes de você ter definido ele. segue a baixo o código corrigido

percorreArray(trsPacientes, function(pacienteTr) {

    var pacienteTr = trsPacientes[posicaoAtual];  

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    var pacienteAtual = montaPaciente(pacienteTr);
 var imc = pacienteAtual.pegaImc();
    tdImc.textContent = imc;

    console.log(imc);
});

Valeu brother =]

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