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

principal.js:8 Uncaught TypeError: Cannot read property 'querySelector' of undefined

Meu código funciona, ele imprime todos os IMC's como na tabela, mas mesmo assim esse erro é impresso no console, não to entendendo... Já fiz, deu erro, copiei o do professor, deu certo, refiz, tomei o mesmo erro de novo... Não entendo o que estou errando

pacientes = document.querySelectorAll(".paciente");

for (var i = 0; i <= pacientes.length; i++) {
var pacienteFulano = pacientes[i];

var tdAltura = pacienteFulano.querySelector(".info-altura"); 
var tdPeso = pacienteFulano.querySelector(".info-peso");

var peso = tdPeso.textContent;
var altura = tdAltura.textContent;

var tdImc = pacienteFulano.querySelector(".info-imc");

var alturaValida = true;
var pesoValido = true;

if (peso <= 0 || peso >= 500){
    tdImc.textContent = "PESO INVÁLIDO";
    pesoValido = false;
}

if (altura <= 0 || altura >= 3.00) {
    tdImc.textContent = "ALTURA INVÁLIDA";
    alturaValida = false;
}

if (pesoValido && alturaValida) {
    var imc = peso / (altura * altura);
    tdImc.textContent = imc.toFixed(2);
}
}
4 respostas

Oi Tales, tudo bem?

Acredito que você tenha esquecido de declarar a variável pacientes. Seu código está assim:

pacientes = document.querySelectorAll(".paciente");

Deveria ser:

var pacientes = document.querySelectorAll(".paciente");

Caso isso ainda não funcione, mande seu HTML aqui também para entendermos melhor o que está acontecendo =)

Espero ter ajudado!

vish, o erro segue o mesmo... aqui está o HTML

</head>
<body>
    <header>
        <div class="container">
            <h2 class="titulo-cabecalho">Aparecida Nutrição</h2>
        </div>
    </header>
    <main>
        <section class="container">
            <h2>Meus pacientes</h2>
            <table>
                <thead>
                    <tr>
                        <th>Nome</th>
                        <th>Peso(kg)</th>
                        <th>Altura(m)</th>
                        <th>Gordura Corporal(%)</th>
                        <th>IMC</th>
                    </tr>
                </thead>
                <tbody id="tabela-pacientes">
                    <tr class="paciente" id="paciente-1">
                        <td class="info-nome">Paulo</td>
                        <td class="info-peso">100</td>
                        <td class="info-altura">2.00</td>
                        <td class="info-gordura">10</td>
                        <td class="info-imc">0</td>
                    </tr>

                    <tr class="paciente" >
                        <td class="info-nome">João</td>
                        <td class="info-peso">80</td>
                        <td class="info-altura">1.72</td>
                        <td class="info-gordura">40</td>
                        <td class="info-imc">0</td>
                    </tr>

                    <tr class="paciente" >
                        <td class="info-nome">Erica</td>
                        <td class="info-peso">54</td>
                        <td class="info-altura">1.64</td>
                        <td class="info-gordura">14</td>
                        <td class="info-imc">0</td>
                    </tr>

                    <tr class="paciente">
                        <td class="info-nome">Douglas</td>
                        <td class="info-peso">85</td>
                        <td class="info-altura">1.73</td>
                        <td class="info-gordura">24</td>
                        <td class="info-imc">0</td>
                    </tr>
                    <tr class="paciente" >
                        <td class="info-nome">Tatiana</td>
                        <td class="info-peso">46</td>
                        <td class="info-altura">1.55</td>
                        <td class="info-gordura">19</td>
                        <td class="info-imc">0</td>
                    </tr>
                </tbody>
            </table>

        </section>
    </main>

    <script src=".\js\principal.js"></script>

</body>
**
solução!

Oi Tales, agora consegui visualizar seu erro, ele está no laço de repetição, nessa linha:

for (var i = 0; i <= pacientes.length; i++) 

O correto seria:

for (var i = 0; i < pacientes.length; i++) 

Isso acontece porque o índice do array sempre começa com 0. Como temos 5 pacientes, então nossos índices para acessar são: 0, 1, 2, 3, 4. Você está utilizando o sinal de maior igual, então como pacientes.length vale 5, ele irá de 0 até 5, mas o índice 5 não existe, então ele retornará undefined. Por isso não está funcionando!

Espero ter ajudado =)

aah, era isso meesmo! Brigaaado.