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

Dúvida na utilização de função e comando "alert"

<button> clique aqui </button>

<script>


function alerta() {

alert("oi")

}



var button = document.querySelector("button")
onclick = alerta()


</script>

Pessoal, ao executar o código acima observei que o alerta é exibido antes do clique no botão. Qual o erro? (meu objetivo seria exibir a janela somente após o clique no botão...

Agradeço a quem puder ajudar.

4 respostas

Fala, Thiago! Tudo bem contigo?

Quando roda, ele já pega a função e lança o alert

Uma solução seria chamar essa função dentro do html

<button onclick="alerta()"> clique aqui </button>

<script>

    function alerta() {

        alert("oi")

    }

</script>

Espero ter ajudado, Thiago!!!

Um abraço e bons estudos!!!

Oi Thiago, tudo bem?

Para não chamar a função direto é só retirar os () do alerta no onclick = alerta(), deixe apenas onclick = alerta como abaixo:

<meta charset="UTF-8">

<button>Clique aqui</button>

<script>

function alerta() {

alert("oi");

}


var button = document.querySelector("button");
button.onclick = alerta;


</script>

Outra forma de fazer é:


<meta charset="UTF-8">

<input type="button" onclick="alerta()" value="Clique aqui" />

<script>

function alerta()
{
   alert("oi");
}
</script>

Espero ter ajudado, Thiago.

Abraço e bons estudos.

Agradeço a ajuda. Muito obrigado.

Pelo que compreendi, a maneira de evitar o carregamento automático da função seria coloca-la "amarrada" no mundo html.

Fernando, muito legal a estrutura do código. Só uma dúvida (curiosidade). Comparei os códigos e vi que a mudança ocorre na seguinte passagem:

Código Correto:

button.onclick = alerta;

Código Errado

onclick = alerta()

por que ao retirar os () eu consigo "segurar" a função?

Como o JavaScript vai identificar a função se eu retirar os ()? (pelo que tinha entendido a função seria "alerta()". Achei que se apontasse apenas "alerta"(sem os parêntesis) o resultado seria "undefined"

solução!

Fui rever a aula e consegui entender o porquê. Agradeço ao pessoal que respondeu as dúvidas.