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

Validação de erro não funciona

Segui a aula porem, a validação parou de funcionar. O log mostra o push pro array porém, o array aparece vazio e o paciente é inserido normalmente na tabela.

var botaoAdicionar = document.querySelector("#adicionar-paciente");

botaoAdicionar.addEventListener("click", function(event){
    event.preventDefault();

    var form = document.querySelector("#form-adiciona");

    var paciente = obtemPaciente(form);

    var pacienteTR = montaTR(paciente);

    var erro = validaPaciente(paciente);

    console.log(erro);

    if(erro.length > 0){
       exibeMensagemErro(erros);
        return;
    }

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

   tabela.appendChild(pacienteTR);

   form.reset();
});

function obtemPaciente(form){

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

function montaTR(paciente){
    var pacienteTR = document.createElement("tr");
    pacienteTR.classList.add("paciente");

    pacienteTR.appendChild(montaTD(paciente.nome, "info-nome"));
    pacienteTR.appendChild(montaTD(paciente.peso, "info-peso"));
    pacienteTR.appendChild(montaTD(paciente.altura, "info-altura"));
    pacienteTR.appendChild(montaTD(paciente.gordura, "info-gordura"));
    pacienteTR.appendChild(montaTD(paciente.imc, "info-imc"));

   return pacienteTR;
}

function montaTD(dado,classe){
    var td = document.createElement("td");

    td.textContent = dado;
    td.classList.add(classe);

    return td;
}

function validaPaciente(paciente) {
    var erros = [];

    if(!validaPeso(paciente.peso)){
        erros.push = "Peso é Inválido";
    }

    if(!validaAltura(paciente.altura)){
        erros.push = "Altura é Inválida";
    }

    return erros;
}

function exibeMensagemErro(erros){
    var ul = document.querySelector("#mensagem-erro");

    erros.forEach(function(erro){
        var li = document.createElement("li");
        li.textContent = erro;
        ul.appendChild(li);
    });
}
2 respostas
solução!

Encontrei meu erro. A forma correta para o push é:

   if(!validaPeso(paciente.peso)){
        erros.push("Peso é Inválido");
    }

    if(!validaAltura(paciente.altura)){
        erros.push("Altura é Inválida");

e não:

    if(!validaPeso(paciente.peso)){
        erros.push = "Peso é Inválido";
    }

    if(!validaAltura(paciente.altura)){
        erros.push = "Altura é Inválida";
    }

Boa noite, Rodrigo! Como vai?

Que bom que resolveu o problema! E obrigado por compartilhar a sua solução conosco! Assim todos crescemos juntos e fazemos da Alura uma plataforma cada vez melhor! Continue assim!

Grande abraço e bons estudos, meu aluno!