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

O if só funciona para o primeiro paciente

O if para quando da inválido, caso o peso ou altura estejam fora do normal, só funcionam para o primeiro paciente, onde está meu erro?

var titulo = document.querySelector("h1");
titulo.textContent = "Aparecida Nutricionista";

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

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

    var paciente = pacientes[i];

    var tdPeso = paciente.querySelector(".info-peso");
    var peso = tdPeso.textContent;

    var tdAltura = paciente.querySelector(".info-altura");
    var altura = tdAltura.textContent;

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

    var pesoEhValido = true;
    var alturaEhValida = true;

    if(peso <= 0 || peso >= 1000){
        pesoEhValido = false;
        tdImc.textContent = "Peso inválido!";
        paciente.style.color = "red";
    }

    if(altura <= 0 || altura >= 3) {
        alturaEhValida = false;
        tdImc.textContent = "Altura inválida!";

    }

    if(alturaEhValida && pesoEhValido) {
        var imc = peso / (altura * altura);
        tdImc.textContent = imc.toFixed(2);
    }

    if(alturaEhValida == false || pesoEhValido == false) {
        tdImc.textContent = "Altura e peso inválidos!";
    }



}

4 respostas

!DOCTYPE html>

</head>
<body>

    <header>
        <div class="container">
            <h1>Aparecida Nutrição</h1>
        </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="primeiro-paciente">
                        <td class="info-nome">Paulo</td>
                        <td class="info-peso">1000</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">800</td>
                        <td class="info-altura">2.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">460</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!

Bom dia!

Seu código funciona perfeitamente. Não tem erro nenhum.

Talvez o que você esteja se referindo a problema, é que o primeiro teste avalia o peso para acima de tonelada (1000):

if(peso <= 0 || peso >= 1000){
        pesoEhValido = false;
        tdImc.textContent = "Peso inválido!";
        paciente.style.color = "red";
    }

Se você testar com um peso menor (menor que 1000, tavez 500), sua solução ainda vai funcionar

Uma outra melhoria que você pode fazer, é ajustar o operador lógico do ultimo teste. Você está usando "ou" (||)

if(alturaEhValida == false || pesoEhValido == false) {
        tdImc.textContent = "Altura e peso inválidos!";
    }

Aqui, seria melhor usar "e" (&&):

if(alturaEhValida == false && pesoEhValido == false) {
        tdImc.textContent = "Altura e peso inválidos!";
    }

Se ainda tiver dúvida ou algum problema, faça novo post.

Caso tenha ajudado na solução, peço que marque minha resposta como solução do tópico.

Bons estudos!

Meu deus, Thiago, muito obrigada! Quebrei a cabeça a noite toda ontem procurando o erro, agradeço novamente aqui, porque nunca ia ver esse erro, rs!

Boa tarde!

Só um detalhe.. aí não tem erro nenhum. O código está perfeito.. o que tem ai, é uma regra de negócio aplicada errada.

Mas no quesito implementação, está perfeito. Parabéns!

Bons estudos!