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

erro Uncaught ReferenceError: validaPeso is not defined

Boa tarde professor , estou com problemas ... segundo o console demonstrado no console diz que a função validapeso() não foi definida mas a mesma está presente definida no arquivo form.js conforme a aula do prefessor. o que pode ser?? Grato pela atenção

8 respostas

Oi, Wagner, tudo bem?

Você poderia colocar o seu código aqui para nos podermos ver o que está acontecendo? Mas a priori, esse erro nos quer dizer que a função validapeso() não foi criada, ou seja, você está chamando uma função em que ela não foi ainda criada, ai esse erro é apresentado.

Aguardamos :}

Boa tarde srta Lais não sei se pode ler o texto que escrevi por que foi a minha conclusão também visto que o console reporta esse erro no arquivo form.js Percebi que esse erro já aconteceu com outros alunos mas no forum não foi possivel identificar a solução.

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

    /*verficando se o item foi adicionado a  partir do console.log
    console.log(botaoAdcionar)
    */
    botaoAdicionar.addEventListener("click",function(event){

        // o metedo preventDefault inibi o efeito padrao do browser de recarregar e ous er
        // direcionado para um nova pagina uma vez que o mer formulario está na mesma pagina
       event.preventDefault();

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

       // Extraindo informações do Form
       var paciente = obtemPacienteFomulario(form);
       console.log(paciente);

       if(!validaPaciente(paciente)){
        console.log("paciente invalido");
        return;
    }


       // cria tr a td do paciente
       var pacienteTr = montaTr(paciente);


      // Construindo uma nova tabela a partir do javascript 
       var tabela =  document.querySelector("#tabela-pacientes");
       tabela.appendChild(pacienteTr);

       form.reset();

    });

    function obtemPacienteFomulario(form){

        // capturando as informações da pagina ou seja os valores  usando value
        //criando um objeto paciente

        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;
       }
    // organizando o codigo
    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"));

        // Agora vamos colocar os dados referente á pacienteTR na tabela usando appendchild
        // criando um classe filha a partir da classe mae usando o metodo appendChild
        //colocando uma classe dentro  da outra ou seja class Td dentro da classe TR
        //populando as informações capturadas nos campos

        return pacienteTr;  
    }

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

        return td;
    }

    function validaPaciente(paciente){
        if(validaPeso(paciente.peso)){
            return true;
        }else{
            return false;
        }
    }

sira seu código aqui

Oi, Wagner.

Li sim, mas é que temos que confiar nas mensagens de erros que o console nos apresenta. No código que você nos passou (não sei se você omitiu alguma parte quando copiou pra cá), não apresenta a função validaPeso, que seria essa aqui:

function validaPeso(peso){

    if (peso >= 0 && peso <= 1000) {
        return true;
    } else {
        return false;
    }
}

Se ela não estiver declarada no seu código, quando você chamá-la, como a chamou aqui: if(validaPeso(paciente.peso))ela irá apresentar esse erro.

Boa tarde professora Lais, algo importante para apoiar a sua analise a função valida paciente utiliza a função que está no arquivo principal.js portanto temos uma chamada de função,no arquivo form.js e a função a ser utilizada no arquivo principal.js.. Este pode ser o problema?

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

    /*verficando se o item foi adicionado a  partir do console.log
    console.log(botaoAdcionar)
    */
    botaoAdicionar.addEventListener("click",function(event){

        // o metedo preventDefault inibi o efeito padrao do browser de recarregar e ous er
        // direcionado para um nova pagina uma vez que o mer formulario está na mesma pagina
       event.preventDefault();

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

       // Extraindo informações do Form
       var paciente = obtemPacienteFomulario(form);
       console.log(paciente);

       if(!validaPaciente(paciente)){
        console.log("paciente invalido");
        return;
    }


       // cria tr a td do paciente
       var pacienteTr = montaTr(paciente);


      // Construindo uma nova tabela a partir do javascript 
       var tabela =  document.querySelector("#tabela-pacientes");
       tabela.appendChild(pacienteTr);

       form.reset();

    });

    function obtemPacienteFomulario(form){

        // capturando as informações da pagina ou seja os valores  usando value
        //criando um objeto paciente

        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;
       }
    // organizando o codigo
    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"));

        // Agora vamos colocar os dados referente á pacienteTR na tabela usando appendchild
        // criando um classe filha a partir da classe mae usando o metodo appendChild
        //colocando uma classe dentro  da outra ou seja class Td dentro da classe TR
        //populando as informações capturadas nos campos

        return pacienteTr;  
    }

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

        return td;
    }

    function validaPaciente(paciente){
        if(validaPeso(paciente.peso)){
            return true;
        }else{
            return false;
        }
    }
u código aqui

Desculpe eu enviei duas vezes o mesmo codigo ..... aff hoje ta dificil erro, segue o arquivo que contem a função

GRato pela sua atenção

insira seu cód
    console.log('fui carregado de uma arquivo externo');
    var titulo = document.querySelector(".titulo");
    titulo.textContent = "Vai cortinhians";


    /* localizando o item selecionado a partir do id chamado "primeiro paciente"
        uma caracteristica do  .querySelector essa funçao so retorna um elemento de
        cada vez. Se precisarmos que retornar um array e necessário trocar
        essa função pela sua irmã .querySelectorAll. 

        No código abaixo estamos selecionando o item por um Id que identifica
        qual paciente estamos trabalhando no codigo mais geral estamos usando
        agora a classe paciente que é um elemento comum entre todos os pacientes.

        var paciente =  document.querySelector("#primeiro-paciente");
    */

    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;

        // localizando e selecionado a altura do paciente
        var TdAltura = paciente.querySelector(".info-altura");
        var altura = TdAltura.textContent;

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

        var alturaEhValida = validaAltura(altura);
        var pesoEhValida=  validapeso(peso);

        if( !pesoEhValida){
            console.log('peso invalido');
            pesoEhValida = false;
            tdImc.textContent = 'Peso invalido';

            /* Logo abaixo foi criado no CSS uma nova classe chamada 
            paciente-invalido e adiciono
            aqui no js para alterar o estilo da pagin separarando o mundo CSS do JS.

            */
           paciente.classList.add("paciente-invalido");

           /* O codigo abaixo faz a alteração na cor no html mas faz isso de forma
           um pouco trabalhosa é preciso alterar em toda o local do Js.
            paciente.style.backgroundColor = "lightcoral";
            */


        }

        if(!alturaEhValida){
            console.log("altura invalida");
            alturaEhValida = false;
            tdImc.textContent = "altura invalida";

           // paciente.style.backgroundColor = "lightcoral";
            // a linha toda é preenchida não somente as letras

            paciente.classList.add("paciente-invalido");
        }

        // calculando o imc da pessoa somente se as condições anteriores forem verdadeiras

        if(pesoEhValida && alturaEhValida){
            var imc = calculaImc(peso,altura);

            /* o valor calculado do imc possui muitas casas decimais 
            para fixar a quantidade de casa uso um metodo toFixed(qtd de casas)
            tdImc.textContent = imc. 
            */

            tdImc.textContent = imc;

        }else{
            tdImc.textContent = "Altura e/ou peso invalidos";
        }

        function calculaImc(peso,altura){
            var imc = 0;
            imc = peso /(altura * altura);
            return imc.toFixed(2);
        }

        function validapeso(peso){

            if(peso >= 0 && peso < 1000){
                return true;
            }else{
                return false;
            }
        }

        function validaAltura(altura){

            if(altura >=0 && altura <= 3.0){
                return true;

            }else {
                return false;
            }
        }







    }
igo aqui
solução!

Oi, Wagner!

Sem problema algum. Então, o erro foi uma besteirinha, você declarou em alguns pontos do seu código validapeso e em outros validaPeso. O fato de termos uma mudança de maiúsculo para minúsculo, o JS caracteriza como funções diferentes e não reconhece, apontando esse erro de não definição.

Aqui, você define como validapeso:

function validapeso(peso){

            if(peso >= 0 && peso < 1000){
                return true;
            }else{
                return false;
            }
        }

E aqui como validaPeso:

 function validaPaciente(paciente){
        if(validaPeso(paciente.peso)){
            return true;
        }else{
            return false;
        }
    }

Corrigindo, o seu código volta a funcionar corretamente :}

Espero ter te ajudado e bons estudos!

Nossa!!! que coisa.. Agradeço.. srta Lais a sua disposição em ajudar a solucionar o problema.Tenho muito que aprender é gosto muito de tecnologia.

Isso aí, Wagner! Erros na programação devem ser vistos como nossos amigos, eles no ensinam bastante. E o que mais importa é a vontade de aprender, isso é valioso :}

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software