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 sansn= avant (annulable), le participe passé (shown) = après. On les écoute avecaddEventListener.
🎯 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 / Offcanvas | show, shown, hide, hidden |
| Dropdown | show, shown, hide, hidden |
| Tab | show.bs.tab, shown.bs.tab, hide.bs.tab |
| Carousel | slide.bs.carousel, slid.bs.carousel |
| Toast | show, shown, hide, hidden |
| Collapse | show, 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 queshown(après) : l’élément n’est pas encore visible/animé, le focus échoue ou saute. Placez les actions post-ouverture dansshown.
💡 Pour un dev React — Ces événements DOM natifs s’écoutent dans un
useEffectavec cleanup. Mais en pratique,react-bootstrapexpose des propsonShow/onHide/onEnteredqui remplacent ces écouteurs — plus idiomatique dans un composant React.
✏️ Exercices
- Mettre le focus sur le premier champ d’une modale une fois ouverte.
✅ Solution
Écouter shown.bs.modal et faire .querySelector('input').focus().
- 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 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