3
respostas

função "adicionaPacienteNaTabela()" undefined...

este código abaixo se refere ao código do arquivo form.js a princípio ele comportava a função

adicionaPacienteNaTabela();

função esta que foi largamente debatida no capítulo 9 do curso de JavaScript

var botaoAdicionar = document.querySelector("#adicionar-paciente");

botaoAdicionar.addEventListener("click",function () {
    event.preventDefault();

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

    var paciente = obtemPacienteDoFormulario(form);

    var erros = validaPaciente(paciente);

    exibeMensagensDeErro(erros);

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

    adicionaPacienteTabela(paciente);

    form.reset();

});

function adicionaPacienteTabela(paciente) {
    var pacienteTr = montaTr(paciente);
    var table = document.querySelector("#tabela-pacientes");
    table.appendChild(pacienteTr);
}

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 Tr = document.createElement("tr");
    Tr.classList.add("paciente");

    Tr.appendChild(montaTd(paciente.nome, "info-nome"));
    Tr.appendChild(montaTd(paciente.peso, "info-peso"));
    Tr.appendChild(montaTd(paciente.altura, "info-altura"));
    Tr.appendChild(montaTd(paciente.gordura, "info-gordura"));
    Tr.appendChild(montaTd(paciente.imc, "info-imc"));

    return Tr;
}

function montaTd(dado,classe) {

    var td = document.createElement("td");
    td.classList.add(classe);
    td.textContent = dado;

    return td;
}

function validaPaciente(paciente) {
    var erros = [];

    if (paciente.nome == "") erros.push("nome do paciente não pode ser vazio!");
    if (!validaPeso(paciente.peso)|| paciente.peso == "") erros.push("peso é inválido!");
    if (!validaAltura(paciente.altura)|| paciente.altura == "") erros.push("altura é inválida!");
    if (paciente.gordura <= 0 || paciente.gordura > 100) erros.push("gordura corporal inválida!");

    return erros;
}

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

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

porém, a partir do momento que eu tentei acessar esta função do arquivo "buscar-pacientes.js" como está no código seguinte, a função se enconcontrava como undefined

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

botaoAdicionar.addEventListener("click",function () {

    var xhr = new XMLHttpRequest();

    xhr.open("GET","https://api-pacientes.herokuapp.com/pacientes");

    xhr.addEventListener("load", function () {
        var erroAJAX = document.querySelector("#erro-AJAX");

        if (xhr.status == 200) {
            erroAJAX.classList.add("invisivel");
            var pacientes = JSON.parse(xhr.responseText);

            pacientes.forEach(function (paciente) {

                adicionaPacienteTabela(paciente);

            });
        }
        else{
            erroAJAX.classList.remove("invisivel");
        }
    });

    xhr.send();

});

function adicionaPacienteTabela(paciente) {
    var pacienteTr = montaTr(paciente);
    var table = document.querySelector("#tabela-pacientes");
    table.appendChild(pacienteTr);
}

portanto, para solucionar o problema eu movi a função "adicionaPacienteNaTabela()" para o arquivo buscar-paciente.js

o problema foi solucionado, inclusive a chamada dessa função pelo código do arquivo form.js foi bem sucedida, entretanto, ainda fiquei com muitas dúvidas em relação a este erro, afinal não fazia sentido algum a função não ter sido encontrada pelo código do arquivo "buscar-paciente.js" .

espero ter deixado claro a minha dúvida,

agradeço a atenção, desde já.

3 respostas

Oi Berg, esse erro pode acontecer quando a ordem de scripts fica incorreta, como um arquivo pode ser executado antes do outro está carregado, temos um problema desse tipo.

O ideal era que você disponibilizasse seu projeto com o problema pra gente no github pra analisarmos de perto e testar. Assim podemos ser mais assertivos na resposta.

Olá Wanderson, vc pode me guiar para que possa enviar o projeto para vcs no Github? Obrigado

Hm, não me parece ser tão prático já que você parece não conhecer de Git. Então faz o seguinte, cria um zip do seu projeto e me envia como anexo nesse email: wanderson.sabino@alura.com.br