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

.forEach is not an function (erro)

Oi, na hora de fazer o forEach para a página, escrevi o código assim como o professor, mas na hora de testar o programa, o meu console dizia que erros.forEach não é uma função aqui está o erro:

form.js:28 Uncaught TypeError: erros.forEach is not a function
    at exibeMensagemDeErro (form.js:28)
    at HTMLButtonElement.<anonymous> (form.js:14)

E este é o meu código da função exibeMensagemDeErro:

function exibeMensagemDeErro (erros) {

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

Já agradeço desde já pela ajuda!

5 respostas

Olá, Eugênio. Consegue postar a parte do código onde você define a variável erros e chama a função exibeMensagemDeErro ?

Olá, desculpa a demora, aqui está

    var erros = validaPaciente(paciente);

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

Eugênio, pode ser que o problema esteja na função validaPaciente(). Se ela não estiver retornando corretamente um array, não conseguirá acessar o método forEach. Qualquer coisa posta aqui também a função validaPaciente pra termos uma noção.

Oi, desculpa de novo passei o dia fora, aqui está a validaPaciente

function validaPaciente(paciente){

    var erros = [];

    if (!validaPeso(paciente.peso)) {

        return "O Peso é invalido!";
    }
     if (!validaAltura(paciente.altura)) {

        return "A Altura é invalida!";
    }

    return erros;
}
solução!

Aí está o problema. Nessa parte do curso já não devemos retornar a String de erro como está sendo feito, mas sim adicionar a string na lista de erros. Então em vez de:

return "O Peso é invalido!";

Deveria estar fazendo:

erros.push("Peso é inválido"); //Adiciona String na lista de erros

No caso o forEach serve para percorrer todos os elementos de uma lista, mas se não estiver retornando corretamente uma lista, quando tentar usar o método forEach() vai gerar o erro que você está recebendo. Além dessas duas validações ainda tem mais outras a serem feitas, então recomendo que assista novamente as aulas e veja se não deixou passar nada. A minha função ficou assim:

function validaPacientes(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 (!pesoValido(paciente.peso) && paciente.peso.length > 0) {
        erros.push("Peso é inválido");
    }

    if (!alturaValida(paciente.altura) && paciente.altura.length > 0) {
        erros.push("Altura é inválida");
    }

    return erros;

}

Espero ter ajudado