Comprendre ce qu'est un événement, brancher une fonction avec addEventListener, utiliser l'objet événement (target, key), et réagir à la souris et au clavier.
1Situer
Le cinéma Rif de Tanger veut une page de réservation : on choisit le nombre de places avec des boutons + et −, l'affiche s'éclaire au survol de la souris, et le bouton « Réserver » affiche un récapitulatif. Rien de tout cela ne se passe au chargement de la page : le code doit attendre que le visiteur agisse. C'est la programmation événementielle.
2Comprendre
Un écouteur attend un événement
addEventListener('click', ajouter) installe un écouteur sur le bouton +. Rien ne s'exécute encore.
1 / 5
Qu’est-ce qu’un événement ?
Un événement est quelque chose qui arrive dans la page : un clic, une touche, la souris qui bouge, un champ modifié, la page chargée. Le programme attend et réagit : c’est la programmation événementielle.
addEventListener
const plus =document.querySelector('#plus');
plus.addEventListener('click', () => { // type d'événement, fonction à exécuter
places++;
nb.textContent= places;
});
on peut brancher plusieurs fonctions sur le même événement ;
removeEventListener débranche une fonction nommée ;
l’ancienne façon onclick="..." dans le HTML est à éviter.
La fonction reçoit un objet qui décrit l’événement :
document.addEventListener('click', (e) => {
console.log(e.target); // l'élément cliquéconsole.log(e.clientX, e.clientY); // position de la souris
});
champ.addEventListener('keydown', (e) => {
console.log('Touche :', e.key); // "a", "Enter", "Escape"...
});
e.preventDefault() annule le comportement normal (suivre un lien, envoyer un formulaire). e.stopPropagation() empêche l’événement de remonter aux parents.
La propagation
Un clic sur un <li> est aussi un clic sur le <ul> qui le contient, puis sur le <body> : l’événement remonte (bouillonnement). On en profite pour écouter une seule fois sur le parent : c’est la délégation d’événements.
Exemple simple
La sonnette de la porte
On installe la sonnette une fois (addEventListener). Ensuite, à chaque fois que quelqu'un appuie (l'événement click), elle sonne (la fonction s'exécute). Entre deux visites, elle attend.
○Le bouton + augmente le nombre : cliquez jusqu'à afficher 5
○Le bouton − diminue le nombre sans descendre sous 0 : descendez jusqu'à 0
○Au survol de l'affiche (mouseover), ajoutez-lui la classe vue
○Le bouton Réserver écrit le récapitulatif dans #recap, par exemple « Réservation : 3 places »
○Dans le champ code, affichez chaque touche dans la console (« Touche : ... », événement keydown)
4Pratiquer
Exercice 1 · Le bon événement
Quel événement utiliser pour : (1) un clic sur un bouton ; (2) chaque caractère tapé dans un champ ; (3) le choix dans une liste <select> ; (4) la page entièrement chargée ; (5) la souris qui quitte une image ?
Voir le corrigé
1. click
2. input (ou keydown / keyup pour les touches)
3. change
4. DOMContentLoaded (HTML prêt) ou load (images comprises)
5. mouseout (ou mouseleave)
Exercice 2 · Un seul écouteur pour toute la liste
Une liste #films contient 30 <li>. Plutôt que 30 écouteurs, écrivez un seul écouteur sur la liste qui affiche le titre du film cliqué.
Voir le corrigé
document.querySelector('#films').addEventListener('click', (e) => {
const li = e.target.closest('li');
if (li) console.log('Film choisi :', li.textContent);
});
// L'événement « remonte » (bouillonnement) du li jusqu'à la liste :// c'est la délégation d'événements.
Exercice 3 · Le raccourci clavier
Quand le visiteur appuie sur Échap, cachez l'élément #fenetre.
Voir le corrigé
document.addEventListener('keydown', (e) => {
if (e.key==='Escape') {
document.querySelector('#fenetre').hidden=true;
}
});