Leçon 6 / 20

Gérer le focus autour d’une fenêtre de dialogue

20 min HTML5 — accessibilité, composants natifs et métadonnées Gratuit

Objectif : Assurer un retour du focus cohérent après la fermeture de la fenêtre de newsletter.

Quand vous ouvrez une fenêtre de newsletter au clavier, les personnes qui utilisent le clavier ou un lecteur d’écran doivent pouvoir commencer à interagir avec son contenu. Quand elles la ferment, elles doivent retrouver le bouton qui l’a ouverte, plutôt que de perdre leur position dans la page.

La leçon précédente a mis en place le dialogue natif et ses commandes d’ouverture et de fermeture. Vous allez compléter ce comportement en gérant explicitement le focus, sans changer le HTML de référence ni ajouter de fichier au projet.

Préparer les points de focus

Le dialogue contient déjà un champ courriel obligatoire, qui peut recevoir le focus et constitue un point d’entrée utile. Le bouton déclencheur est celui qui porte command="show-modal" commandfor="newsletter" : mémorisez-le avant l’ouverture pour pouvoir y revenir après la fermeture. Le script ci-dessous s’appuie sur ces éléments existants et ne requiert aucun attribut supplémentaire.

Ajouter le fichier JavaScript complet

Créez newsletter.js à la racine du projet. Le script écoute l’événement toggle du dialogue : lorsqu’il passe à l’état ouvert, le champ courriel reçoit le focus ; lorsqu’il passe à l’état fermé, le focus retourne au déclencheur mémorisé. Cette approche couvre aussi la fermeture par Échap et le bouton de fermeture natif.

JavaScript
const dialogue = document.querySelector("#newsletter");
const declencheur = document.querySelector('[command="show-modal"][commandfor="newsletter"]');
const champCourriel = document.querySelector("#courriel");

if (dialogue && declencheur && champCourriel) {
  dialogue.addEventListener("toggle", () => {
    if (dialogue.open) {
      champCourriel.focus();
    } else {
      declencheur.focus();
    }
  });
}
Aperçu du rendu
Chargement de l'aperçu…

Charger le script dans la page

Dans index.html, ajoutez la ligne suivante juste avant la balise fermante </body>. Le script s’exécute après la création des éléments HTML qu’il recherche ; les commandes natives présentes dans le squelette restent inchangées.

HTML
<script src="newsletter.js"></script>
Aperçu du rendu
Chargement de l'aperçu…

Testez les deux chemins avec le clavier : placez-vous sur « S’inscrire à la newsletter », activez le bouton et vérifiez que le champ courriel est focalisé. Fermez ensuite la fenêtre avec Échap, puis recommencez avec le bouton « Fermer » ; dans les deux cas, le focus doit revenir au bouton déclencheur.

À retenir

  • Déplacez le focus vers un champ pertinent quand la fenêtre s’ouvre.
  • Mémorisez le bouton qui a déclenché l’ouverture.
  • À la fermeture, restituez le focus à ce bouton, y compris après Échap.
  • Vérifiez le comportement au clavier avec chaque moyen de fermeture.

Vous pourrez ensuite utiliser details et summary pour présenter les informations pratiques de l’événement sans fabriquer un composant interactif.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.