Adloun

JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 8 · Application directe du cours

Dans quel ordre ?

Événements et formulaires · niveau 2

Énoncé

Avec la page et le script suivants, qu'affiche la console après un clic sur le bouton ? Et après un clic sur la carte, hors du bouton ?


<section id="rayon">
  <article id="carte">
    <button type="button" id="ajouter">Ajouter</button>
  </article>
</section>

const rayon = document.querySelector("#rayon");
const carte = document.querySelector("#carte");
const ajouter = document.querySelector("#ajouter");

rayon.addEventListener("click", () => console.log("A rayon"));
carte.addEventListener("click", (e) => console.log("B carte", e.target.id));
ajouter.addEventListener("click", () => console.log("C bouton"));
rayon.addEventListener("click", () => console.log("D rayon (capture)"), { capture: true });
carte.addEventListener("click", (e) => {
  console.log("E carte, arrêt");
  e.stopPropagation();
});
document.addEventListener("click", () => console.log("F document"));

Corrigé


--- clic sur le bouton
D rayon (capture)
C bouton
B carte ajouter
E carte, arrêt
--- clic sur la carte, hors du bouton
D rayon (capture)
B carte carte
E carte, arrêt

Clic sur le bouton : la capture descend et ne rencontre qu'un écouteur de capture, D sur la section ; puis la cible, C ; puis la remontée : sur la carte, B puis E, dans l'ordre d'enregistrement (e.target reste le bouton) ; E arrête la propagation, donc ni A ni F ne sont appelés. Clic sur la carte : même trajet, sans le bouton ; la cible est la carte elle-même. L'arrêt de propagation de E empêche ici le document (F) d'être prévenu : un menu qui se fermerait « au clic ailleurs » ne fonctionnerait plus. C'est pourquoi on évite stopPropagation.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →