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

Meu imc não calcula pelo formulário

eu fiz algumas modificações nas variaveis, pra ficar mais fácil quando eu olhar, lembrar pra que servia. Porém nesse momento eu percebi que algumas variaveis são as mesmas, mas eu mudei de nome, fui tentar consertar e acabei me perdendo mais ainda, alguém consegue ver onde está o erro?O erro aparece quando eu adiciono pelo formulariocalcula-imc:

var pacientes = document.querySelectorAll(".paciente"); //importa todos os dados dos pacientes
for (var i = 0; i < pacientes.length; i++)
{   
    var paciente = pacientes[i];

    var tdpeso = paciente.querySelector('.info-peso'); //de dentro da linha importada pega o td de peso
    var peso = tdpeso.textContent; // dentro do td do peso pega o seu valor escrito no caso 100

    var tdaltura = paciente.querySelector(".info-altura"); // pega o valor da td dentro da tr
    var altura = tdaltura.textContent; // pega o valor escrito dentro do td

    //comeco da validacao para imc//

    var alturavalida = true; //define como valido de cara
    var pesovalido = true; //define como valido de cara

    var tdimc = paciente.querySelector(".info-imc"); //pega a celula do imc e define como uma variavel dentro do js

    if (peso <= 0 || peso >= 450)
    {
        pesovalido= false; //caso o valor do peso seja irregular define como invalido e printa dentro da celula como valor invalido
        tdimc.textContent = "Valor inválido";
        paciente.classList.add("invalido");
    }
    if (altura <= 0 || altura >= 2.7)
    {
        tdimc.textContent = "Valor inválido"; //caso o valor da altura seja irregular define como invalido e printa dentro da celula como valor invalido
        alturavalida = false;
        paciente.classList.add("invalido");
    }

function calculo(altura, peso)
{
    var imc = 0;
    imc = peso/ (altura*altura);
    return imc.toFixed(1);
}


    if (pesovalido && alturavalida) // <-- como os valores sao validos ja de inicio passa para essa etapa
    {
        var imc = calculo(altura, peso);
        tdimc.textContent = imc;
    }
}




form:

var botao= document.querySelector(".botao");
botao.addEventListener("click", function funcao(event)
{
    event.preventDefault();
    var form = document.querySelector("#formadiciona");

    var criapaciente = document.createElement("tr");

    var nome = document.createElement("td");
    var peso = document.createElement("td");
    var altura = document.createElement("td");
    var gordura = document.createElement("td");
    var imc = document.createElement("td");

    nome.textContent = form.nome.value;
    peso.textContent = form.peso.value;
    altura.textContent = form.altura.value;
    gordura.textContent = form.gordura.value;
    imc.textContent = calculo(altura,peso);

    criapaciente.appendChild(nome);
    criapaciente.appendChild(peso);
    criapaciente.appendChild(altura);
    criapaciente.appendChild(gordura);
    criapaciente.appendChild(imc);

    var tabela = document.querySelector("#tabela-pacientes");
    tabela.appendChild(criapaciente);

}
);

`

3 respostas
solução!

Fala Karoline, tudo bem? Espero que sim!

O que acontece é que, no form, no momento de atribuir o valor do imc utilizando a função calculo, nessa linha:

 imc.textContent = calculo(altura,peso);

Você esta passando por parâmetro para a função calculo a variável altura e peso, e esses valores são na verdade a td que criamos, o corretoria utilizar a altura e peso vindas do formulário, assim:

imc.textContent = calculo(form.altura.value, form.peso.value);

Testa ai e fala pra gente se funcionou ta bom?

Aguardo o retorno :D

funcionou obg

Denada Karoline, qualquer dúvida pode chamar a gente aqui no fórum, ta bom?