Disparando Eventos Programaticamente - JavaScript
Eventos podem surgir não apenas como resultado de ações do usuário em uma página web. Eles também podem ser disparados programaticamente.
Para disparar um evento programaticamente, pode-se chamar o método dispatchEvent()
Event
MouseEvent
KeyboardEvent
const event = new Event(nome_do_evento, config); // definindo o objeto do evento
element.dispatchEvent(event); // disparando o evento para o elemento
O primeiro argumento passado ao construtor Event
: se o evento pode ser cancelado (cancelable
para cancelável,true
para não cancelável)false
: se o evento deve borbulhar (bubbles
para borbulhar)true
Por exemplo, vamos programaticamente clicar em um link:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<a id="link" href="https://www.programicio.com">Programício</a>
<script>
const link = document.getElementById("link"); // obtendo o link
const event = new MouseEvent("click");
link.dispatchEvent(event);
</script>
</body>
</html>
O clique no link dispara um evento de mouse "click", então definimos um objeto do evento do tipo MouseEvent
const event = new MouseEvent("click");
Então, disparamos o evento para o elemento link
link.dispatchEvent(event);
Como resultado, ocorre a navegação pelo link já no carregamento da página.
E, como em qualquer caso geral, esse evento também pode ser tratado:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<a id="link" href="https://www.programicio.com">Programício</a>
<script>
const link = document.getElementById("link");
link.addEventListener("click", (e)=>{
console.log("Link has been clicked");
e.preventDefault(); // prevenindo a navegação
});
const event = new MouseEvent("click", {cancelable: true});
link.dispatchEvent(event);
</script>
</body>
</html>
Para que a execução do evento possa ser interrompida, passamos um objeto de configuração com a propriedade cancelable: true
MouseEvent
e.preventDefault()