Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Localização do array

Pessoal, porque o array tem que estar dentro da função de validação de pacientes?

function validaPaciente(paciente) {

    **var erros = []**;

    if (paciente.nome.length == 0) {
        erros.push("O nome não pode ser em branco");
    }

    if (paciente.gordura.length == 0) {
        erros.push("A gordura não pode ser em branco");
    }

    if (paciente.peso.length == 0) {
        erros.push("O peso não pode ser em branco");
    }

    if (paciente.altura.length == 0) {
        erros.push("A altura não pode ser em branco");
    }

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

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

    return erros;
}

E depois ele é inserido também por fora da função:

botao.addEventListener("click", function (event) {

    event.preventDefault(); // Limpando configurações padrão do botão;

    let paciente = obtemPacienteFormulario(form);

    **var erros = []**;

    if(erros.length > 0) {

        console.log(erros);
        return;

    } else {

        let pacienteTr = document.createElement("tr");

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

        tabelaPacientes.appendChild(pacienteTr);
        pacienteTr.appendChild(criaTd(paciente.nome,"info-nome"));
        pacienteTr.appendChild(criaTd(paciente.peso,"info-peso"));
        pacienteTr.appendChild(criaTd(paciente.altura,"info-altura"));
        pacienteTr.appendChild(criaTd(paciente.gordura,"info-gordura"));
        pacienteTr.appendChild(criaTd(paciente.imc,"info-imc"));

        form.reset();

    }

No meu entendimento, ao declará-lo como var mesmo que fora da função e dar um erros.push dentro da função ele já entenderia e atualizaria o array. Não é assim?

1 resposta
solução!

Leonardo, tudo bem?

Dentro da função validaPaciente a variável tem escopo local, portanto, apenas armazená os erros da validação;

Na função botao.addEventListener você tem outra variável, onde o escopo está dentro dessa função, e poderá ser acessada por outra função que esteja dentro do escopo dela.

Ou seja, se na função botao.addEventListener, DEPOIS de setar a variável erros, você chamasse a função validaPaciente (sem o array erros dela), seria sim possível armazenar os erros no array da função botao.addEventListener.

Aí depende mais do que você pretende fazer: um array com todos os erros, ou dois arrays de erros, um para erros da validação e outro do botão. E se a função de validação está dentro do escopo do botão (se acessível por ela).

Espero que ajude.

Bons estudos :)