3
respostas

Erros is not defined

O console mostra "Uncaught ReferenceError: erros is not defined at HTMLButtonElement. (form.js:9)", mas não estou conseguindo entender onde esta o meu erro.

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

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

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

    if(!validaPaciente(paciente)){
        console.log("Paciente inválido")
        return;
    }

    //adiciona o paciente na tabela
    var tabela = document.querySelector("#tabela-pacientes");

    tabela.appendChild(pacienteTr);

    form.reset();
});

//criando uma função para extrair os dados do formulário através de objetos
function obtemPacienteDoFormulario(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 = [];
    // push serve para jogar conteudo para dentro de um array
    if(!validaPeso(paciente.peso)){
        erros.push("Peso é invalido");
     }

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

     return erros;
}
3 respostas

Lá na linha 9 a variavel "erros", ainda n tinha sido criada, ela foi criada dentro da função validaPaciente, mas mesmo que você coloque o if(erros.length > 0){ var mensagemErro = document.querySelector("#mensagem-erro"); mensagemErro.textContent = erros; return; } abaixo dessa função NÃO ira funcionar, pois uma váriavel criada dentro uma função pertence a essa função. No caso você tem que colocar esse "if" dentro da função validaPaciente, vê direitinho como ela deve ficar e o seu problema vai ter sido solucionado.

Consegui resolver, realmente eu não tinha declarado ''erros'' antes do if, tudo que precisei fazer foi adicionar

 var erros = validaPaciente(paciente);

antes de chamar

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

e funcionou, tanto para altura quanto para o peso!

Que bom Lucas! Não esquece de marcar como resolvido, para o pessoal não ficar caindo aqui e boa sorte nos estudos!