Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

HTMLDialogElement : évènement cancel

Baseline Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis mars 2022.

L'évènement cancel est déclenché sur un élément <dialog> lorsque l'utilisateur·ice déclenche une demande de fermeture.

Le gestionnaire d'évènement cancel peut être utilisé pour remplacer le comportement par défaut lors de la réception d'une demande de fermeture et empêcher la boîte de dialogue de se fermer. Si le comportement par défaut n'est pas annulé, la boîte de dialogue se ferme et déclenche un évènement close. Si le comportement par défaut n'est pas annulé, la boîte de dialogue se ferme et déclenche un évènement close.

Les demandes de fermeture peuvent être déclenchées par :

  • Appuyer sur la touche Échap sur les plateformes de bureau
  • Appeler la méthode requestClose()
  • Le bouton retour sur les plateformes mobiles

Cet évènement est annulable mais ne se propage pas.

Syntaxe

Utilisez le nom de l'évènement dans des méthodes comme addEventListener(), ou définissez une propriété de gestionnaire d'évènement.

js
addEventListener("cancel", (event) => { })

oncancel = (event) => { }

Type d'évènement

Un évènement Event générique.

Exemples

Annuler une boîte de dialogue

L'exemple suivant montre un bouton qui, lorsqu'il est cliqué, ouvre un <dialog> en utilisant la méthode showModal().

Vous pouvez déclencher l'évènement cancel en cliquant soit sur le bouton Demander la fermeture pour fermer la boîte de dialogue (avec la méthode requestClose()) ou en appuyant sur la touche Échap.

Remarquez que le gestionnaire d'évènement cancel enregistre l'évènement puis retourne, permettant à la boîte de dialogue de se fermer (ce qui à son tour déclenche l'évènement close). Vous pouvez supprimer le commentaire de la ligne contenant event.preventDefault() pour annuler l'évènement.

HTML

html
<dialog id="dialogue">
  <button type="button" id="demande-fermeture">Demander la fermeture</button>
</dialog>

<button id="ouvrir">Ouvrir la boîte de dialogue</button>

JavaScript

js
const dialogue = document.getElementById("dialogue");
const boutonOuvrir = document.getElementById("ouvrir");
const boutonDemandeFermeture = document.getElementById("demande-fermeture");

// Le bouton Ouvrir ouvre une boîte de dialogue bloquante
boutonOuvrir.addEventListener("click", () => {
  journaliser("bouton ouvrir cliqué", true);
  journaliser("showModal() du dialogue appelé");
  dialogue.showModal();
});

// Demande de fermeture
boutonDemandeFermeture.addEventListener("click", () => {
  journaliser("bouton demander la fermeture cliqué");
  journaliser("requestClose() du dialogue appelé");
  // Déclenche l'évènement cancel
  dialogue.requestClose();
});

// Déclenché lorsque requestClose() est appelé
// Empêche la fermeture de la boîte de dialogue en appelant event.preventDefault()
dialogue.addEventListener("cancel", (event) => {
  journaliser("évènement cancel du dialogue déclenché");
  // Supprimez les commentaires des deux lignes suivantes pour empêcher la fermeture du dialogue
  // journaliser("fermeture du dialogue annulée");
  // event.preventDefault();
});

dialogue.addEventListener("close", (event) => {
  journaliser("évènement close du dialogue déclenché");
});

Résultat

Spécifications

Spécification
HTML
# event-cancel
HTML
# handler-oncancel

Compatibilité des navigateurs

Voir aussi

  • Élément HTML implémentant cette interface :