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

Mensagem de peso inválido aparece mesmo quando o peso está válido

Olá! Estou com dificuldade para encontrar meu erro. Não sei o porquê, mas toda vez que tento adicionar um paciente com peso válido, o site mostra a mensagem de peso inválido. Podem me ajudar?

Segue os códigos completos abaixo.

PARA CRIAR O FORMULÁRIO


//pegando um botão no mundo HTML e atrelando uma função e ele


/////////////////////////////////////
////////REFATORANDO O CÓDIGO ////////
/////////////////////////////////////



var botaoAdicionar = document.querySelector("#adicionar-paciente");
botaoAdicionar.addEventListener("click", function(evento){

    evento.preventDefault();


var formulario = document.querySelector("#form-adiciona")
var paciente = extraiPacienteDoForm(formulario);
var pacienteTr = montaTr(paciente);

var erro = validaPaciente(paciente);


if (erro.length > 0){

    var mensagemErro = document.querySelector("#mensagem-erro");
    mensagemErro.textContent = erro;
    return;

}

//colocando a tr formada dentro da tabela de pacientes
var tabela = document.querySelector("#tabela-pacientes")

tabela.appendChild(pacienteTr);

formulario.reset();

// captando os valores que estão dentro dos inputs, via formulario, usando "value"
//CRIANDO OBJETO com as informações //


})

///////////////////////////
/////////FUNÇÕES///////////
///////////////////////////

function extraiPacienteDoForm(form){

    var paciente = {
        nomeInput: form.nome.value,
        pesoInput: form.peso.value,
        alturaInput: form.altura.value,
        gorduraInput: form.gordura.value,
        imc:calculaImc(form.peso.value, form.altura.value)
    }
    return paciente;

}


//criando os elementos html tds e a tr

function montaTr(paciente){

    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");


    //colocando as tds como filhos da tr - pacienteTr
    pacienteTr.appendChild(montaTd(paciente.nomeInput, "info-nome"));
    pacienteTr.appendChild(montaTd(paciente.pesoInput, "info-peso"));
    pacienteTr.appendChild(montaTd(paciente.alturaInput, "info-altura"));
    pacienteTr.appendChild(montaTd(paciente.gorduraInput, "info-gordura"));
    pacienteTr.appendChild(montaTd(paciente.imc, "info-imc"));

    return pacienteTr;
}

function montaTd(dado, classe){

    var td = document.createElement("td");
    td.textContent = dado; //nomeInput
    td.classList.add(classe); //info-nome

    return td;
}


function validaPaciente(paciente){

    if(validaPeso(paciente.peso)){

        return "";
    }else {

        return "O peso é inválido";
    }
}

PARA CALCULAR IMC E VALIDAR PESO E ALTURA

var tituloPrincipal = document.querySelector(".titulo-principal");
tituloPrincipal.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 tdAltura = paciente.querySelector(".info-altura");
    var tdImc = paciente.querySelector(".info-imc");

    var peso = tdPeso.textContent;
    var altura = tdAltura.textContent;
    var imc = tdImc.textContent;

    var pesoEhValido = validaPeso(peso);
    var alturaEhValida = validaAltura(altura);


        if (!pesoEhValido){ // se for falso, vai entrar na condição

            tdImc.textContent = "Peso inválido";
            pesoEhValido = false;
            paciente.classList.add("valor-invalido");


        } if(!alturaEhValida){

            tdImc.textContent = "Altura inválida";
            alturaEhValida = false;
            paciente.classList.add("valor-invalido");


        }

        if (pesoEhValido && alturaEhValida){

            tdImc.textContent = calculaImc(peso,altura);
        }

}

function validaPeso(peso){
    if(peso >= 0 && peso < 500){

         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(0);

}
2 respostas
solução!

Boa tarde!

na sua função validaPaciente(paciente); você passou a variável paciente , que é do tipo Paciente.

var paciente = {
        nomeInput: form.nome.value,
        pesoInput: form.peso.value,
        alturaInput: form.altura.value,
.... 
}

Na sua função:

function validaPaciente(paciente){
    if(validaPeso(paciente.peso)){

paciente.peso não existe. Deve ser paciente.pesoInput

Nossa, mas nunca que ia dar certo mesmo. Valeu, Thiago!