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

Failed to execute 'appendChild' on 'Node'

Ola, boa tarde. Quando eu executo o codigo ta dando essa mesagem de erro. Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'. at montaTr (form.js:44) at HTMLButtonElement. (form.js:7) montaTr @ form.js:44 (anonymous) @ form.js:7

Segue o codigo.

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

    var form=document.querySelector("#form-adiciona");
    var paciente = obtemPacienteDoFormulario(form);
    var pacienteTr=montaTr(paciente);

    //adc paciente na tabela
    var tabela = document.querySelector("#tabela-pacientes");

    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.textContent = dado;
    td.classList.add(classe);

    return montaTd;

}
function montaTr(paciente) {
    //Cria TR
    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");
    //Cria as TD's e a adiciona dentro da TR
    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"));
    // retorna a TR
    return pacienteTr;  
}
4 respostas

O meu código não funcionou dessa forma, eu só consegui usar quando extrai o montaTD para uma variável e então usei o appendChild nela, abaixo ta o código:

function montaTR(paciente){

var pacienteTr = document.createElement("tr");
pacienteTr.classList.add("paciente");



var nomeTd = montaTD(paciente.nome, "infor-nome");

var pesoTd = montaTD(paciente.peso, "info-peso");

var alturaTd = montaTD(paciente.altura, "info-paciente");

var gorduraTd = montaTD(paciente.gordura, "info-gordura");

var imcTd = montaTD(paciente.imc, "info-imc");







pacienteTr.appendChild(nomeTd);
pacienteTr.appendChild(pesoTd);
pacienteTr.appendChild(alturaTd);
pacienteTr.appendChild(gorduraTd);
pacienteTr.appendChild(imcTd);

return pacienteTr;}

Fiz igual vc fez ai, e vc pira q repetiu o erro. Mudei a sintaxe "TD" que a minha ta com o "D" minusculo, e uma linha sua ai q ta com "infor-nome". Ajeitei isso, e msm assim deu o msm erro. Vou ve com uma amigo meu amanha pra ele me ajudar. Mas muito obrigado .

Olha então o erro pode estar em outra parte do código, qualquer coisa zipa ele e manda em um link do Google drive ou git

solução!

Man, eu consegui. O returno da função tava retornando ela mesma, e não a variável com os dados. Ai ficou assim e revolveu.

function montaTd(dado,classe){
    var td = document.createElement("td");
    td.textContent = dado;
    td.classList.add(classe);

    return td;

}