Tot nu toe reageerde je code niet op de gebruiker. Met events maak je je pagina echt interactief: reageer op klikken, typen, scrollen en meer. addEventListener is de kern van elke interactieve webpagina.
1
addEventListener()
Wat betekent dit?
element.addEventListener(type, handler) โ koppelt een luisteraar aan een element. Zodra het event plaatsvindt, roept de browser de handler-functie aan. Je kunt meerdere listeners aan hetzelfde element koppelen.
const knop = document.getElementById('mijnKnop');
knop.addEventListener('click', function() {
console.log('Knop geklikt!');
});
// Of met een arrow function:
knop.addEventListener('click', () => {
console.log('Knop geklikt!');
});
'click' โ muisklik of tap'input' โ toets ingedrukt in veld'submit' โ formulier verzonden2 Het event-object
De handler-functie ontvangt automatisch een event-object (vaak e of event genaamd). Het bevat informatie over wat er is gebeurd.
knop.addEventListener('click', (e) => {
console.log(e.type); // 'click'
console.log(e.target); // het element waarop geklikt is
console.log(e.target.id); // het id van dat element
});
// Handig bij meerdere knoppen:
document.querySelectorAll('button').forEach(btn => {
btn.addEventListener('click', (e) => {
console.log('Je klikte op: ' + e.target.textContent);
});
});
3 Input- en change-events
Wat betekent dit?
'input' โ vuurt elke keer dat de waarde verandert (iedere toetsaanslag). Gebruik dit voor live feedback.
'change' โ vuurt als het veld de focus verliest รฉn de waarde is gewijzigd. Minder events.
const invoer = document.getElementById('tekst');
// Elke toetsaanslag:
invoer.addEventListener('input', (e) => {
console.log('Huidige waarde: ' + e.target.value);
console.log('Aantal tekens: ' + e.target.value.length);
});
4
event.preventDefault()
Wat betekent dit?
Sommige elementen hebben een standaard gedrag: een link navigeert, een formulier herlaadt de pagina. e.preventDefault() stopt dit standaard gedrag zodat jouw JavaScript het overneemt.
const formulier = document.getElementById('mijnForm');
formulier.addEventListener('submit', (e) => {
e.preventDefault(); // pagina herlaadt NIET
const naam = document.getElementById('naam').value;
if (naam.trim() === '') {
console.log('Fout: naam is verplicht');
} else {
console.log('Formulier verzonden voor: ' + naam);
}
});
๐ก Altijd gebruiken bij formulieren die je met JavaScript verwerkt. Zonder preventDefault() herlaadt de pagina bij submit en verlies je alle JS-staat.
5 Oefening 1: Klik-teller
Opdracht:
Maak een klik-teller. Elke klik op de knop verhoogt de teller met 1. Voeg ook een Reset-knop toe die de teller terugzet op 0.
โ addEventListener('click', ...) op de teller-knop
โ Een variabele die de telling bijhoudt
โ Teller-weergave wordt bijgewerkt na elke klik
โ Reset-knop zet teller terug op 0
6 Oefening 2: Live kleur-preview
Opdracht:
Maak een kleurenkiezer. Drie <input type="color">-velden voor rood, groen en blauw. Zodra een waarde verandert, wordt de achtergrond van een #preview-div bijgewerkt met rgb(r, g, b).
โ 'input' event op elk kleurveld
โ element.style.backgroundColor bijwerken
โ rgb-waarde opbouwen vanuit de 3 velden
7 Eindopdracht: Live tekenteller
Bouw een Twitter-achtige tekenteller:
โ Textarea met max 280 tekens
โ Live teller: "Nog X tekens over" (bijgewerkt bij elk input-event)
โ Teller wordt rood als er minder dan 20 tekens overblijven
โ "Wissen"-knop maakt textarea leeg en reset teller
โ Optioneel: voorkomen dat meer dan 280 tekens ingevoerd kunnen worden
Goed gedaan! Je maakt nu interactieve pagina's met events.
In les 11 leer je formulieren te valideren met JavaScript.
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Events</title>
</head>
<body>
<button id="knop">Klik mij</button>
<p id="output"></p>
<input id="tekst" type="text" placeholder="Typ hier...">
<p id="live"></p>
<form id="form">
<input name="naam" placeholder="Naam">
<button type="submit">Verzenden</button>
</form>
<script>
let aantalKliks = 0;
document.getElementById('knop').addEventListener('click', () => {
aantalKliks++;
document.getElementById('output').textContent = aantalKliks + ' keer geklikt';
});
document.getElementById('tekst').addEventListener('input', (e) => {
document.getElementById('live').textContent = e.target.value;
});
document.getElementById('form').addEventListener('submit', (e) => {
e.preventDefault();
const naam = e.target.naam.value;
alert('Hallo ' + naam);
});
</script>
</body>
</html>