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

Apenas o campo de "João" sofre alterações e recebe o calculo do IMC

Ao recarregar a página, somente o campo "João" tem o IMC calculado e a alteração aplicadas, tanto quando eu altero a "altura", tanto no "peso" o IMC é sempre calculado e quando jogo uma mensagem de erro... Somente o "João" recebe o erro, poderiam me ajudar? Abaixo está meu 'calcula-imc.js'

var titulo = document.querySelector(".titulo")
titulo.textContent = "nutrição legal"

var paciente = document.querySelectorAll(".paciente")
console.log(paciente)

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

    var paciente = paciente[1]

    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 = validaPeso(peso)
    var alturaEhValida = validaAltura(altura)

    if (!pesoEhValido){
        console.log("peso invalido")
        pesoEhValido = false
        tdImc.textContent = "peso inválido"
        paciente.classList.add("paciente-invalido")
    }

    if (!alturaEhValida){
        console.log("altura invalido")
        alturaEhValida = false
        tdImc.textContent = "Altura invalida"
        paciente.classList.add("paciente-invalido")
    }

    if (alturaEhValida && pesoEhValido) {
        var imc = calculaIMC(peso, altura)
        tdImc.textContent = imc
    }
}

function validaPeso(peso){
    if(peso >= 0 &&  peso < 1000){
        return true
    }else{
        return false
    }
}

function validaAltura(altura){
    if (altura >= 0 && altura <= 3.0){
        return true
    }else{
        return false
    }
}

function calculaIMC(peso, altura){
    var imc = 0

    imc = peso / (altura * altura)

    return imc.toFixed(2)
}
4 respostas

Fala, Hugo! Tudo bem?

Acredito que somente o João está recebendo os cálculos pois dentro do for, o código está especificando que a "var pacientes" recebe o "paciente[1]". Ou seja, todo o código posterior refletirá apenas no João, que está na posição "1" dentro do array paciente.

Tente alterar a primeira linha dentro de seu for de

var paciente = paciente[1]

para

var paciente = paciente[i]

Dessa forma o esperado é que o código dentro do for funcione para todos os pacientes do array.

Bons estudos!

Ainda não funciona :/ quando eu deixo

var paciente = paciente[i]

Somente o primeiro paciente é alterado

solução!

Oi, Hugo!

Imagino que isso acontece porque antes do loop for nós atribuímos um valor para a "var paciente" e, posteriormente, dentro do for, mudamos a atribuição da mesma "var paciente". Ou seja, ela deixa de receber o "document.querySelectorAll(".paciente")" e passa a receber apenas "paciente[1]" ou "paciente[i]"

Tente alterar o código dessa maneira aqui:

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

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

    var paciente = pacientes[i];
...

Espero que dessa vez funcione :)

Funcionou! Muito obrigado