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

ForEach is not a function - Aula 06

Não consegui evoluir na aula 06, devido ao erro abaixo apresentado no chrome:

form.js:27 Uncaught TypeError: erros.forEach is not a function at exibeMensagensErro (form.js:27) at HTMLButtonElement. (form.js:14)

Onde está o erro no fonte abaixo?

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

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

    var paciente = obtemPacienteForm(form);

    var pacienteTr = montaTr(paciente);

    var erros = validaPaciente(paciente);
        console.log(erros);
        if (erros.length > 0){
            exibeMensagensErro(erros);
            return;
        }


    var tabela = document.querySelector ("#tabela-pacientes");
    tabela.appendChild(pacienteTr);
    form.reset();

});

function exibeMensagensErro(erros){
    var ul = document.querySelector("#mensagens-erro");
    erros.forEach(function(erro){
        var li = document.createElement("li");
        li.textContent = erro;
        ul.appendChild(li);
    });
}


// function exibeMensagemErro(erros){
//    var ul = document.querySelector("#mensagens-erro");
//    for(var i=0; i<erros.length; i++){
//        var erro = erros[i];
//        var li = document.createElement("li");
//        li.textContent = erro;
//        ul.appendChild(li);
//    }
// }

function obtemPacienteForm(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){
    if (validaPeso(paciente.peso)){
        return "";
    }else{
        return "Peso inválido!";
        }
 }

Obrigado! Flávio

3 respostas

Ele acusa que a variável erro não possui a função forEach... Confere o que é que tem na variável :).

Verifica se a variável erros, está retornando um vetor.

Outra coisa, se acostume a nomear variáveis desta forma, btnAdicionar, e não desta, btnadicionar , facilita na leitura do código, se eu não me engano o nome dessa boa prática se chama camelCase.

solução!

A função validaPaciente() está trazendo uma string, não um array.