4
respostas

Criando Coluna de Situação

Pessoal, boa tarde.

Estou querendo colocar a situação do paciente(abaixo do peso, acima do peso, etc...), sendo assim, inclui uma nova coluna no HTML de situação conforme segue abaixo

<h2>Meus pacientes</h2>
                <table>
                    <tr>
                        <th>Nome</th>
                        <th>Peso(kg)</th>
                        <th>Altura(m)</th>
                        <th>IMC</th>
                        <th>Situacao</th>
                    </tr>
                    <tr class="paciente">
                        <td class="info-nome">Leonardo</td>
                        <td class="info-peso">40</td>
                        <td class="info-altura">1.67</td>
                        <td class="info-imc"></td>
                        <td class="info-situac"></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>
                        <td class="info-situac"></td>
                    </tr>
                </table>

e então criei no arquivo calcula-imc.js os 'IF's' com a situação:

var botao = document.getElementById("calcula-imcs");
//botao.onclick = calculaTodosImcs;

botao.addEventListener("click", function(){
var trsPacientes = document.getElementsByClassName("paciente"); //ArrayPaciente

percorreArray(trsPacientes, function(pacienteTr){

        var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
        var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
        var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];
        //var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[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);
                                    if (imc <= 17){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Muito abaixo do peso");
                                    }
                                    else if (imc >= 17.01 && imc <= 18.49){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Abaixo do peso");
                                    }
                                    else if (imc >= 18.50 && imc <= 24.49){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Peso normal");
                                    }
                                    else if (imc >= 25 && imc <=  29.99){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Acima do peso");
                                    }
                                    else if (imc >= 30 && imc <= 34.99){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Obesidade I");
                                    }
                                    else if (imc >= 35 && imc <= 39.99){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Obesidade II (severa)");
                                    }
                                    else if(imc >= 40){
                                    var tdSituacao = pacienteTr.getElementsByClassName("info-situac")[0];
                                    tdSituacao.textContent = ("Obesidade II (severa)");
                                    }

                                    return imc;

                                        } else{
                                            console.log("Altura Errada")
                                            }

                                     }
                             }

        var imc = pacienteAtual.pegaImc();

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

        tdImc.textContent = imc;
        console.log(imc);

        });
});

Os pacientes que já estão no HTML aparece a situação direitinho, mas quando tento adicionar, recebo estes erros:

Uncaught TypeError: Cannot set property 'textContent' of undefined
    at Object.pegaImc (calcula-imc.js:21)
    at calcula-imc.js:57
    at percorreArray (percorre.js:5)
    at HTMLButtonElement.<anonymous> (calcula-imc.js:7)

Conseguem me ajudar, por gentileza?

4 respostas

Opa, pode conferir qual é a linha e postar aqui? Tem muito código e essa indicação facilitaria bastante :).

Tente substituir o textContent por innerHTML

Opa, peço desculpas pelo código todo, rs.

Essa primeira linha que ele reclama (at Object.pegaImc (calcula-imc.js:21)) seria essa abaixo: tdSituacao.textContent = ("Muito abaixo do peso"); que no caso retornaria na minha coluna situação a string acima.

Esta segunda: (at calcula-imc.js:57) seria : var imc = pacienteAtual.pegaImc(); declaração da variavel IMC.

A terceira (at percorreArray (percorre.js:5)), esta igual ao percorre.js passado no curso: comportamento(pacienteTrAtual);

A quarta, novamente no calcula-imc.js(at HTMLButtonElement. (calcula-imc.js:7)) se refere a esta linha abaixo do percorreArray: percorreArray(trsPacientes, function(pacienteTr){

Tentei trocar pelo innerHTML, os mesmos erros, porém agora, a propriedade que não foi setada é a innerHTML: Cannot set property 'innerHTML' of undefined at Object.pegaImc (calcula-imc.js:29) at calcula-imc.js:57 at percorreArray (percorre.js:5) at HTMLButtonElement. (calcula-imc.js:7)

Fico agradecido pela ajuda!!

Leandro, tudo bem?

Realmente seu código não irá funcionar.

A função anônima que está sendo criada, na hora que você define o Paciente, não tem acesso a variável pacienteTr . Para a função anônima passar a ter acesso a variável, a variável pacienteTr deve ser passada por parâmetro.

Exemplo:

function (pacienteTr) {
    seu código....
}