Skip to Content

10.2 — Les événements

⏱️ TL;DR — Chaque composant émet des événements DOM personnalisés au format action.bs.composant : show/shown, hide/hidden (modale, offcanvas, dropdown…), slid.bs.carousel, shown.bs.tab. Le préfixe sans n = avant (annulable), le participe passé (shown) = après. On les écoute avec addEventListener.

🎯 Objectifs

  • Écouter les événements de cycle de vie.
  • Distinguer événements « avant » et « après ».
  • Annuler une action avec preventDefault.

Le motif show / shown

const modalEl = document.getElementById('m') modalEl.addEventListener('show.bs.modal', () => { console.log('la modale va s\'ouvrir') }) modalEl.addEventListener('shown.bs.modal', () => { // ouverture TERMINÉE (animation finie) → placer le focus, charger des données… modalEl.querySelector('input')?.focus() }) modalEl.addEventListener('hidden.bs.modal', () => { // fermeture terminée → nettoyer le formulaire })

Règle : show/hide = avant (début), shown/hidden = après (fin d’animation).

Annuler une action

Les événements « avant » sont annulables :

modalEl.addEventListener('show.bs.modal', (e) => { if (!userIsAllowed) e.preventDefault() // empêche l'ouverture })

Événements par composant (exemples)

ComposantÉvénements clés
Modal / Offcanvasshow, shown, hide, hidden
Dropdownshow, shown, hide, hidden
Tabshow.bs.tab, shown.bs.tab, hide.bs.tab
Carouselslide.bs.carousel, slid.bs.carousel
Toastshow, shown, hide, hidden
Collapseshow, shown, hide, hidden

Infos dans l’événement

Certains événements portent des données (relatedTarget, e.to/e.from pour le carousel) :

modalEl.addEventListener('show.bs.modal', (e) => { const trigger = e.relatedTarget // le bouton qui a ouvert la modale const id = trigger.getAttribute('data-id') // pré-remplir la modale selon le déclencheur… })

⚠️ Piège — Faire le focus dans show (avant) plutôt que shown (après) : l’élément n’est pas encore visible/animé, le focus échoue ou saute. Placez les actions post-ouverture dans shown.

💡 Pour un dev React — Ces événements DOM natifs s’écoutent dans un useEffect avec cleanup. Mais en pratique, react-bootstrap expose des props onShow/onHide/onEntered qui remplacent ces écouteurs — plus idiomatique dans un composant React.

✏️ Exercices

  1. Mettre le focus sur le premier champ d’une modale une fois ouverte.

✅ Solution

Écouter shown.bs.modal et faire .querySelector('input').focus().

  1. Empêcher une modale de s’ouvrir sous condition.

✅ Solution

Dans show.bs.modal, appeler e.preventDefault() si la condition n’est pas remplie.

🧠 Quiz de révision

1. Format des noms d’événements Bootstrap ?

action.bs.composant (ex. shown.bs.modal).

2. Différence entre show et shown ?

show = avant (début) ; shown = après (animation finie).

3. Quels événements sont annulables ?

Ceux « avant » (show, hide) via preventDefault().

4. Où placer le focus après ouverture d’une modale ?

Dans shown.bs.modal.

5. Comment savoir quel bouton a ouvert une modale ?

event.relatedTarget.


Chapitre suivant : 10.3 — Bundle, plugins & Popper