Événements
Un clic, une touche, un formulaire envoyé… Ce sont des événements. On demande à JavaScript de les « écouter » et d'exécuter une fonction quand ils arrivent.
addEventListener
element.addEventListener("click", () => {
// ce code s'exécute à CHAQUE clic
});
| Événement | Se déclenche quand… |
|---|---|
click | on clique sur l'élément |
input | la valeur d'un champ change (à chaque lettre) |
change | un champ est validé (select, checkbox…) |
submit | un formulaire est envoyé |
keydown | une touche est enfoncée |
mouseenter / mouseleave | la souris entre / sort de l'élément |
L'objet événement
La fonction reçoit un paramètre (souvent nommé e ou event) plein d'infos. Clique dans l'aperçu puis tape au clavier :
Lire un champ en direct
Gérer un formulaire
Par défaut, envoyer un formulaire recharge la page. e.preventDefault() l'en empêche, pour tout gérer en JavaScript.
Pourquoi écouter submit sur le formulaire plutôt que click sur le bouton ?
- C'est pareil, aucune différence
submitmarche aussi avec la touche Entrée et respecte la validation (required…)clickne fonctionne pas sur les boutons
L'utilisateur peut valider avec Entrée : seul submit capte tous les cas, après la validation HTML.
À toi de jouer
Le compteur
- Le bouton
+1augmente le nombre affiché dans#valeur. - Le bouton
Remise à zérole remet à 0.
Indice
Il faut deux écouteurs declick : un sur #plus et un sur #zero.Indice
Dans le premier :compteur++;, puis affiche la nouvelle valeur dans #valeur avec textContent.Indice
Le premier écouteur :document.querySelector("#plus").addEventListener("click", () => {
compteur++;
document.querySelector("#valeur").textContent = compteur;
});Le mode sombre
Un clic sur #theme ajoute la classe sombre au body, un second clic l'enlève (le CSS est déjà prêt).
Indice
Écoute leclick sur le bouton #theme.Indice
Lebody s’atteint directement avec document.body.Indice
document.body.classList.toggle("sombre") ajoute la classe si elle est absente, et l’enlève sinon.L'aperçu en direct
Pendant que l'utilisateur tape son prénom, affiche Bonjour, Prénom ! dans #apercu.
Indice
L’événement qui se déclenche à chaque lettre tapée s’appelleinput.Indice
Le texte tapé se lit avec la propriété.value du champ.Indice
Dans l’écouteur :apercu.textContent = `Bonjour, ${prenom.value} !`;Le livre d'or
- À l'envoi du formulaire, empêche le rechargement.
- Ajoute le message tapé dans un nouveau
lide#messages. - Vide ensuite le champ.
Indice
Écoute l’événementsubmit sur le formulaire, et commence par e.preventDefault();.Indice
Crée unli, mets-y texte.value, puis ajoute-le à #messages avec append.Indice
Pour finir, vide le champ :texte.value = "";À retenir
el.addEventListener("type", fonction).- L'objet
e:e.target,e.key,e.preventDefault(). - Champ : événement
input+ propriété.value. - Formulaire : événement
submit+preventDefault().