1. JavaScript Evenementen (Events)
Evenementen in JavaScript zijn acties die plaatsvinden in de browser, zoals klikken, het laden van een pagina, en invoer van de gebruiker. Ze vormen de kern van de interactie tussen de gebruiker en de webpagina.
1.1 Events: types
Hieronder een lijst met veelvoorkomende event types. Voor een volledige lijst bekijk de MDN docs.
Type: click
click
: Wordt geactiveerd wanneer een element wordt aangeklikt.
document.querySelector("button").addEventListener("click", () => {
console.log("Button is geklikt");
});
Type: load
load
: Wordt geactiveerd wanneer de volledige pagina inclusief alle afhankelijkheden (zoals afbeeldingen en stylesheets) is geladen.
window.addEventListener("load", () => {
console.log("Pagina volledig geladen");
});
Type: DOMContentLoaded
DOMContentLoaded
: Wordt geactiveerd wanneer het HTML-document volledig is geladen en geparseerd, zonder te wachten op stylesheets, afbeeldingen, enz.
document.addEventListener("DOMContentLoaded", () => {
console.log("DOM volledig geladen en geparseerd");
});
Type: input
input
: Wordt geactiveerd wanneer de waarde van een <input>
, <textarea>
, of <select>
element verandert.
document.querySelector("input").addEventListener("input", (event) => {
console.log(`Nieuwe waarde: ${event.target.value}`);
});
Type: submit
submit
: Wordt geactiveerd wanneer een formulier wordt ingediend.
document.querySelector("form").addEventListener("submit", (event) => {
event.preventDefault(); // voorkomt het versturen van het formulier
console.log("Formulier ingediend");
});
Type: mouseover
mouseover
: Wordt geactiveerd wanneer de muis over een element beweegt.
document.querySelector("div").addEventListener("mouseover", () => {
console.log("Muis over element");
});
Type: keydown
keydown
: Wordt geactiveerd wanneer een toets wordt ingedrukt.
document.addEventListener("keydown", (event) => {
console.log(`Toets ingedrukt: ${event.key}`);
});
1.2 Event Propagation (bulling/capturing)
Event propagation bepaalt hoe gebeurtenissen zich verspreiden door de DOM. Er zijn twee belangrijke fasen.
Bubbling
In bubbling (opborrelen) verspreidt het evenement zich van het doelwit element naar boven, door de hiërarchie van voorouders tot de root (meestal document
).
<div id="parent">
<button id="child">Klik mij</button>
</div>
<script>
document.getElementById("parent").addEventListener("click", () => {
console.log("Parent geklikt");
});
document.getElementById("child").addEventListener("click", (event) => {
console.log("Child geklikt");
});
</script>
Als je op de button
klikt, zie je eerst “Child geklikt”, gevolgd door “Parent geklikt”. Dit komt omdat het click
-evenement van het button
element naar het div
element opborrelt.
Capturing
In capturing (vastleggen) verspreidt het evenement zich van de root naar het doelwit element. Dit gebeurt vóór het bubbling.
<div id="parent">
<button id="child">Klik mij</button>
</div>
<script>
document.getElementById("parent").addEventListener("click", () => {
console.log("Parent geklikt");
}, true); // true voor capturing
document.getElementById("child").addEventListener("click", (event) => {
console.log("Child geklikt");
});
</script>
In dit geval, als je op de button
klikt, zie je “Parent geklikt” vóór “Child geklikt”. Dit komt omdat capturing de gebeurtenis eerst van boven naar beneden verspreidt.
1.3 Event Delegation
Event delegation is een techniek waarbij je één enkele event listener gebruikt om gebeurtenissen af te handelen voor meerdere elementen. Dit doe je door gebruik te maken van event propagation.
Let op: in JavaScript bedoelen we iets heel anders met event delegation dan in bijvoorbeeld C#. In JavaScript is het dus niet een type dat een referentie naar een methode houdt.
We gebruiken event delegation in JavaScript om het aantal event listeners lager te houden en om makkelijker dynamisch toegevoegde elementen te beheren.
<ul id="lijst">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<script>
document.getElementById("lijst").addEventListener("click", (event) => {
if (event.target.tagName === "LI") {
console.log(`Geklikt op ${event.target.textContent}`);
}
});
</script>
In dit voorbeeld wordt een enkele event listener toegevoegd aan de ul
. Wanneer een li
wordt aangeklikt, wordt de event handler getriggerd en kan je controleren of de klik plaatsvond op een li
.
1.4 Events voorkomen
preventDefault() wordt gebruikt om de standaardactie te voorkomen die normaal optreedt bij bepaalde evenementen, zoals het versturen van een formulier of het volgen van een link.
<a href="https://example.com" id="mijnLink">Ga naar voorbeeld</a>
<script>
document.getElementById("mijnLink").addEventListener("click", (event) => {
event.preventDefault(); // voorkomt het volgen van de link
console.log("Link geklikt maar niet gevolgd");
});
</script>