3
respostas

Erro no ul.appendChild(li)

Boa noite pessoal,

Estou terminando o módulo 6, validação de form, o console este me retornando o erro "ul.appendChild is not a function" no método exibeMensagensDeErro(Erros);

Segue código para analise:

form.js

//form.js

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

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

        var paciente = obtemPacienteDoFormulario(form);

        var pacienteTr = montaTr(paciente);

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

        var erros = validaPaciente(paciente);

        if(erros.length > 0){
            exibeMensagensDeErro(erros);

            return;
        }



        tabela.appendChild(pacienteTr); 

        form.reset();
});

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 montaTd(dado, classe){
    var td = document.createElement("td");
    td.classList.add(classe);
    td.textContent = dado;

    return td;
}

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 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 nao pode ser em branco");
    }
    if(!validaPeso(paciente.peso)){
        erros.push("Peso Invalido");
    }
    if(!validaAltura(paciente.altura)){
        erros.push("Altura invalida");
    }

    return erros;
}

function exibeMensagensDeErro(erros) {
    var ul = document.querySelector("#ErroMsg").innerHTML = "";

    for(var i =0; i < erros.length; i++){
        var li = document.createElement("li");
        li.textContent = erros[i];
        ul.appendChild(li);

    }
}

index.html

...restante do código...
        <section class="container">
            <h2 id="titulo-form">Adicionar novo paciente</h2>
             <ul id="ErroMsg"></ul>
            <form id="form-adiciona">
                <div class="grupo">
                    <label for="nome">Nome:</label>
                    <input id="nome" name="nome" type="text" placeholder="digite o nome do seu paciente" class="campo">
                </div>
                <div class="grupo">
                    <label for="peso">Peso:</label>
                    <input id="peso" name="peso" type="text" placeholder="digite o peso do seu paciente" class="campo campo-medio">
                </div>
                <div class="grupo">
                    <label for="altura">Alt
3 respostas

Fala Jeferson!

Tranquilo?

Então, é por causa da atribuição da variável ul, eis o seu código:


var ul = document.querySelector("#ErroMsg").innerHTML = "";

Do jeito que está, ele não está guardando o elemento do querySelector, a forma correta seria:


var ul = document.querySelector("#ErroMsg");

ul.innerHTML = "";

Espero ter ajudado!

Abraços!

Boa tarde,

Meu código já estava assim

var ul = document.querySelector("#ErroMsg");

ul.innerHTML = "";

Deixei daquela outra forma para testar, mesmo assim o erro persiste.

Fala Jeferson!

Estranho, fiz um teste aqui neste link e está funcionando normalmente.

Tenta colocar um break-point e ver no console o que é o ul, se é um objeto html mesmo.

Abraços!