3
respostas

Tentei exibir a mensagem de erro mas não funciona a validação, está calculando o IMC normalmente

código Form. js:

var botaoAdicionar = document.querySelector("#adicionar-paciente");
botaoAdicionar.addEventListener("click", function(event){
    event.preventDefault()
    var form = document.querySelector("#form-adiciona"); 
//extraindo info dos pacientes do form

 var paciente = obtemInformaçaoDoFormulario(form);

//criando os elementos do formulário
var pacienteTr = criaTr(paciente)
var erro = validaPaciente(paciente);

if(erro.length > 0 ){
    var mensagemErro = document.querySelector("#mensagem-erro");
    mensagemErro.textContent = erro;
    return;
}

// cria um form para colocar a Tr
    var tabela = document.querySelector("#tabela-pacientes");
    tabela.appendChild(pacienteTr);

})

function obtemInformaçaoDoFormulario(form){
    var paciente = {    
        nome : form.nome.value,
        altura : form.altura.value,
        peso : form.peso.value,
        gordura : form.gordura.value,
        imc : calculaImc(form.peso.value, form.altura.value)
    }
        return paciente;
}

function criaTr(paciente){
    var pacienteTr= document.createElement("tr");
    pacienteTr.classList.add("paciente");
    var nomeTd = criaTd(paciente.nome, "info-nome");
    var pesoTd = criaTd(paciente.peso, "info-peso");
    var alturaTd = criaTd(paciente.altura, "info-altura");
    var gorduraTd = criaTd(paciente.gordura, "info-gordura");
    var ImcTd = criaTd(paciente.imc, "info-imc");



    pacienteTr.appendChild(nomeTd);
    pacienteTr.appendChild(pesoTd);
    pacienteTr.appendChild(alturaTd);
    pacienteTr.appendChild(gorduraTd);
    pacienteTr.appendChild(ImcTd);

    return pacienteTr
}

function criaTd(dado, classe){
    var td = document.createElement("td")
    td.textContent = dado;
    td.classList.add(classe);
    return td;

}

function validaPaciente(paciente){

    if (validaPeso(paciente.peso)){
        return "";
    }
    else {
        return "O peso é Inválido";
    }
}

código calcula-imc :

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

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 imc = peso/(altura*altura);
    tdimc.textContent = imc;

    var AlturaValida= validaAltura(altura);
    var PesoValido= validaPeso(peso);

    if (!PesoValido){
        PesoValido=false;
        tdimc.textContent = "Peso Inválido";
        paciente.classList.add ("paciente-invalido");



    }
    if (!AlturaValida){
        AlturaValida=false;
        tdimc.textContent = "Altura Inválida";
        paciente.classList.add("paciente-invalido");
    }

    if (AlturaValida&&PesoValido){
        var imc = calculaImc(peso, altura);
        tdimc.textContent = imc;

    } 
}

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

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



function calculaImc(peso,altura){
    var imc = 0
    imc = peso/(altura*altura);

    return imc.toFixed(2);
}
3 respostas

Fala ai Julie, tudo bem? Precisa ver o que está sendo retornado pela função validaPaciente:

var erro = validaPaciente(paciente);

No caso seria esse trecho de código, tente adicionar um console.log para ver o que será impresso:

var erro = validaPaciente(paciente);
console.log(erro);

Caso ele retornar uma string vazia, não vai entrar no if mesmo.

Espero ter ajudado.

Sim ele retornou desta forma: "" Mas ainda nao entendi o que devo fazer para funcionar

Fala Julie, nesse caso, vamos ver a função validaPaciente:

function validaPaciente(paciente){

    if (validaPeso(paciente.peso)){
        return "";
    }
    else {
        return "O peso é Inválido";
    }
}

Repare que ela apenas chama a validaPeso:

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

Nesse caso, se o peso for maior ou igual à zero, ou menor do que mil, ela vai retornar que o mesmo é válido.

Ele sendo válido, a função vai retornar a string vazia.

Esse é o motivo dela retornar isso.

Espero ter ajudado.