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

Uncaught TypeError: Cannot read

Estou com problemas, o prgrama estava funcionando perfeitamente ate quando apliquei o for (; ;) {} e começou a aparecer varios erro com getElementsClassName

Uncaught TypeError: Cannot read property 'textContent' of undefined

codigo javascript:

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

for (posicaoAtual = 0;posicaoAtual <= trsPacientes.length - 1;posicaoAtual++)    {

    var pacienteTr = trsPacientes[posicaoAtual];

    var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];

    var Paciente = {nome : tdNome.textContent, 
                    peso : tdPeso.textContent, 
                    tdAltura : tdAltura.textContent
                    }

    if (paciente.altura != 0) {

    var imc = paciente.peso / (paciente.altura * paciente.altura);

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

        console.log(imc);

    } else {

        console.log("Não executei porque altura é igual ZERO")
    }

}

codigo html:

            <table>
                    <tr>
                    <th>Nome</th>
                    <th>Peso(kg)</th>
                    <th>Altura(m)</th>
                    <th>IMC</th>
                </tr>
                <tr class="paciente">
                    <td id="info-nome">Leonardo</td>
                        <td class="info-peso">57</td>
                        <td class="info-altura">1.67</td>
                        <td class="info-imc"></td>
                    </tr>
                    <tr class="paciente">
                        <td class="info-nome">Paulo</td>
                        <td class="info-peso">100</td>
                        <td class="info-altura">2.00</td>
                        <td class="info-imc"></td>
                    </tr>
                    <tr class="paciente">
                        <td class="info-nome">Stewart</td>
                        <td class="info-peso">120</td>
                        <td class="info-altura">1.80</td>
                        <td class="info-imc"></td>
                    </tr>
                    <tr class="paciente">
                        <td class="info-nome">Rafael</td>
                        <td class="info-peso">110</td>
                        <td class="info-altura">1.90</td>
                        <td class="info-imc"></td>
                    </tr>
                </table>
3 respostas

Roberto falto o var antes do posicaoAtual = 0;

solução!

Já coloquei var antes do posicaoAtual mas continuo recebendo o mesmo erro mas com o text.Content: Uncaught TypeError: Cannot read property 'textContent' of undefined e no firefox recebo (TypeError: tdNome is undefined

function calculaImc(paciente) {

    if(paciente.altura != 0) {

    var imc = paciente.peso / (paciente.altura * paciente.altura);
    return imc;
    } 
    else {

        console.log("Não executei porque altura é igual ZERO")
    }

}

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

//corrigido aqui
for (var posicaoAtual = 0;posicaoAtual <= trsPacientes.length - 1;posicaoAtual++)    {

    var pacienteTr = trsPacientes[posicaoAtual];

    var tdNome = pacienteTr.getElementsByClassName("info-nome")[1];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[1];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[1];

    var paciente = { "nome" : tdNome.textContent , "peso" : tdPeso.textContent , "tdAltura" : tdAltura.textContent};            


    var imc = calculaImc(posicaoAtual);


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

        console.log(imc);
}

Oi Roberto,

De acordo com o seu html e javascript notei que temos que fazer alguns ajustes:

1) O nome da classe é "paciente" e não "pacientes". Então ficaria assim:

trsPacientes = document.getElementsByClassName("paciente");

2) Você deve ler a posição 0 do vetor e não a posição 1:

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

3) Você está passando para a função o argumento "posicaoAtual", você deve passar o "paciente". var imc = calculaImc(paciente);

4) Você declarou a variável altura como "tdAltura" , mude para altura:

var paciente = { "nome" : tdNome.textContent , "peso" : tdPeso.textContent , "altura" : tdAltura.textContent};

Com essas mudanças seu código deve ficar assim:

function calculaImc(paciente) {

if(paciente.altura != 0) {

var imc = paciente.peso / (paciente.altura * paciente.altura); return imc; } else {

console.log("Não executei porque altura é igual ZERO") }

}

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

//corrigido aqui for (var posicaoAtual = 0;posicaoAtual <= trsPacientes.length - 1;posicaoAtual++) {

var pacienteTr = trsPacientes[posicaoAtual];

var tdNome = pacienteTr.getElementsByClassName("info-nome")[0]; var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0]; var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0]; var paciente = { "nome" : tdNome.textContent , "peso" : tdPeso.textContent , "altura" : tdAltura.textContent};

var imc = calculaImc(paciente);

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

console.log(imc);

}

Espero ter ajudado. Abraços.