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

Imprime a function em vez d imprimir o resultado dela

Criei um programa para adicionar "novo paciente", mas no lugar de adicionar paciente eu quero que adiciona 3 coisas:

nome do produto preço do produto pontos acumulados ( esse eu dei a fórmula)

mas quando executo ele coloca certinho o nome e o preço do produto, mas no lugar de colocar os pontos acumulados em ve de ele calcular com a fórmula que eu passei, ele simplesmente imprime a function.

Isso que aparece na tela depois de adicionar novo produto:

https://ibb.co/dc3b8cV

Segue abaixo meu código JS completo:

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);

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

    tabela.appendChild(pacienteTr);

    form.reset();

});


function obtemPacienteDoFormulario(form){

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        imc: calculaImc
    }

   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.imc, "info-imc"));

    return pacienteTr;
}

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

var pacientes = document.querySelectorAll(".paciente");

for(var i = 0; i < pacientes.length; i++) {

    var paciente = pacientes[i];

    var tdPeso = paciente.querySelector(".info-peso");
    var peso = tdPeso.textContent;

    var tdNome = paciente.querySelector(".info-nome");
    var nome = tdNome.textContent;

    var tdImc = paciente.querySelector(".info-imc");

}

    var formulaPontos = (0.05 * (1000) / 70)


    function calculaImc(peso, formulaPontos) {
      var imc = 0;
      imc = peso * formulaPontos;
      return imc.tofixed(2);
}
5 respostas

Fala Fábio, tudo bom?

Repare que na hora de montar o JSON paciente, você não executa o método (colocando parenteses no final) e nem passa os parâmetros necessários para sua execução!

Espero ter ajudado.

Abraços e bons estudos!

Quando coloco desse jeito aqui:

function obtemPacienteDoFormulario(form){

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        imc: calculaImc()
    }

Ele não imprime nada na tela e mostra o seguinte erro no console:

calcula-pontos.js:72 Uncaught TypeError: imc.tofixed is not a function at calculaImc (calcula-pontos.js:72) at obtemPacienteDoFormulario (calcula-pontos.js:25) at HTMLButtonElement. (calcula-pontos.js:7)

e ai quando tento colocar parâmetros dentro dos parenteses igual fiz na function calculaImc:

function obtemPacienteDoFormulario(form){

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        imc: calculaImc(peso, formulaPontos)
    }

   return paciente;
}

Ai também não imprime nada na tela e aparece o seguinte erro no console:

calcula-pontos.js:72 Uncaught TypeError: imc.tofixed is not a function at calculaImc (calcula-pontos.js:72) at obtemPacienteDoFormulario (calcula-pontos.js:25) at HTMLButtonElement. (calcula-pontos.js:7)

Estou perdido e não sei o que fazer.

solução!

Fala Fábio,

O javascript segue o padrão CammelCase, sendo a primeira letra da primeira palavra minúscula, e a primeira letra da segunda palavra maiúscula.

Repare que no seu código, você escreve toFixed() com o F minúsculo.

Faça essa alteração no seu código.

Abraços!

Caramba! Você é bom mesmo, era só isso que estava impedindo a impressão, não achava de jeito nenhum.

Muito obrigado!!!!!!!

Que bom que funcionou Fabio!

Estou encerrando o tópico, caso tenha novas dúvidas basta criar um novo!

Abraços!