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

Evento retornando erro

Olá pessoal, esta dúvida já foi coloca aqui no fórum várias vezes mas nenhuma resposta resolveu o problema.

O evento no botão se colocado direto no html funciona perfeitamente, já no arquivo externo sempre retorna o erro abaixo:

Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')

Apesar de conferir resolvi copiar o código do professor e ainda assim nada rs.

var botaoAdicionar = document.querySelector("#adicionar-paciente");
botaoAdicionar.addEventListener("click", (event) => {
        event.preventDefault();
        console.log("Oi eu sou o botao e fui clicado");
    }
);

link para js no github

Obrigado pela atenção! :)

2 respostas
solução!

Olá Leonardo, tudo bem?

Você verificou se o arquivo está sendo adicionado no final do body do seu arquivo HTML?

O navegador demora um pouco para renderizar um arquivo HTML e pode ser que esse tipo de erro aconteça, já que o arquivo Javascript está sendo chamado, executado, mas não consegue encontrar os componentes que você está tentando encontrar, pois a página ainda está carregando.

Por isso é sempre uma boa prática colocar qualquer JS no final do body do seu arquivo.

Se mesmo assim não está funcionando, dê uma olhada no evento window.onload. É um evento que possui um callback que é executado somente quando a página é totalmente carregada.

Você poderia fazer um teste tentando jogar todo o código JS dentro dessa função.

window.onload = function() {
        var botaoAdicionar = document.querySelector("#adicionar-paciente");
        botaoAdicionar.addEventListener("click", (event) => {
            event.preventDefault();
            console.log("Oi eu sou o botao e fui clicado");
        });
}

Ficaria mais ou menos assim.

Bom dia Vitor, era isso mesmo, o arquivo js estava antes do form, por isso todo resto funcionava, o cálculo do IMC, as validações e adição de classes.

Então ou os js é colocado no head e se o js for muito pesado pode deixar o carregamento lento da página ou ao final do body, pois se ficar antes como foi o caso, só é chamado até aquele ponto.

Valeu Vitor!