HTMLElement: beforetoggle Ereignis
Baseline
2024
Newly available
Since April 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Das beforetoggle Ereignis des HTMLElement Interfaces wird an einem Popover oder einem <dialog> Element kurz bevor es angezeigt oder versteckt wird, ausgelöst.
- Wenn das Element von versteckt zu sichtbar wechselt, wird die Eigenschaft
event.oldStateaufclosedgesetzt und die Eigenschaftevent.newStatewird aufopengesetzt. - Wenn das Element von sichtbar zu versteckt wechselt, dann ist
event.oldStateopenundevent.newStateclosed.
Dieses Ereignis ist abbrechbar, wenn ein Element geöffnet ("show") wird, jedoch nicht, wenn das Element geschlossen wird.
Dieses Ereignis kann unter anderem dazu verwendet werden, um:
- zu verhindern, dass ein Element angezeigt wird.
- Klassen oder Eigenschaften vom Element oder zugehörigen Elementen hinzuzufügen oder zu entfernen, beispielsweise um das Animationsverhalten eines Dialogs beim Öffnen und Schließen zu steuern.
- den Zustand des Elements zu löschen, bevor es geöffnet oder nachdem es versteckt wurde, beispielsweise um ein Dialogformular und den Rückgabewert auf einen leeren Zustand zurückzusetzen oder um alle verschachtelten manuellen Popover beim erneuten Öffnen eines Popups zu verstecken.
Syntax
Verwenden Sie den Ereignisnamen in Methoden wie addEventListener(), oder setzen Sie eine Ereignishandler-Eigenschaft.
addEventListener("beforetoggle", (event) => { })
onbeforetoggle = (event) => { }
Ereignistyp
Ein ToggleEvent. Erbt von Event.
Beispiele
Die untenstehenden Beispiele zeigen, wie das beforetoggle Ereignis für ein Popover oder ein <dialog> Element verwendet werden könnte. Dieselben Beispiele würden ähnlich auf anderen Elementtypen funktionieren.
Einfaches Beispiel
Dieses Beispiel zeigt, wie man das beforetoggle Ereignis abfängt und das Ergebnis protokolliert.
HTML
Das HTML besteht aus einem Popover und einem Schalter, um es zu öffnen und zu schließen.
<button popovertarget="mypopover">Toggle the popover</button>
<div id="mypopover" popover>Popover content</div>
JavaScript
Der Code fügt einen Ereignis-Listener für das beforetoggle Ereignis hinzu und protokolliert den Zustand.
const popover = document.getElementById("mypopover");
popover.addEventListener("beforetoggle", (event) => {
if (event.newState === "open") {
log("Popover is about to be shown");
} else {
log("Popover is about to be hidden");
}
});
Ergebnis
Verhindern, dass ein Popover geöffnet wird
Das beforetoggle Ereignis ist abbrechbar, wenn es beim Öffnen eines Elements ausgelöst wird.
Unten zeigen wir, wie ein Popover zuerst überprüfen könnte, ob es geöffnet werden darf, und falls nicht, wird Event.preventDefault() aufgerufen, um das Ereignis abzubrechen. In diesem Beispiel verwenden wir einen Schalter, um festzulegen, ob das Popover geöffnet werden kann oder nicht: In einem "vollständigeren" Beispiel könnte dies vom Anwendungszustand oder davon abhängen, ob die Daten im Popover zum Anzeigen bereit sind.
HTML
Das HTML besteht aus einem Popover, einem Schalter, um es zu öffnen und zu schließen, und einem Schalter, um festzulegen, ob der Button geöffnet werden kann.
<button popovertarget="mypopover">Toggle the popover</button>
<label for="allow-popover">
Allow opening <input type="checkbox" id="allow-popover" checked />
</label>
<div id="mypopover" popover>Popover content</div>
JavaScript
Zuerst richten wir den Code ein, um einen Zustand zu simulieren, in dem wir nicht möchten, dass das Popover geöffnet wird. Dies wird durch die Variable allowOpen dargestellt, die umgeschaltet wird, wenn das zugehörige Kontrollkästchen umgeschaltet wird.
const allowCheckbox = document.getElementById("allow-popover");
let allowOpen = true;
allowCheckbox.addEventListener("change", (event) => {
allowOpen = allowCheckbox.checked;
});
Der Code fügt einen Ereignis-Listener für das beforetoggle Ereignis hinzu. Wenn allowOpen false ist, wird preventDefault() aufgerufen, was verhindert, dass das Popup geöffnet wird.
const popover = document.getElementById("mypopover");
popover.addEventListener("beforetoggle", (event) => {
if (event.newState === "open") {
if (allowOpen) {
log("Popover is about to be shown");
} else {
log("Popover opening prevented");
event.preventDefault();
}
} else {
log("Popover is about to be hidden");
}
});
Ergebnis
Eine Anmerkung zur Zusammenführung von beforetoggle Ereignissen
Wenn mehrere beforetoggle Ereignisse ausgelöst werden, bevor der Ereignisschleifen-Zyklus eine Chance hat, nur ein einziges Ereignis wird ausgelöst. Dies wird als "Ereignis-Zusammenführung" bezeichnet.
Zum Beispiel:
popover.addEventListener("beforetoggle", () => {
// …
});
popover.showPopover();
popover.hidePopover();
// `beforetoggle` only fires once
Weitere Beispiele
- Beispiel zum Öffnen eines modalen Dialogs in
HTMLDialogElement
Spezifikationen
| Specification |
|---|
| HTML> # event-beforetoggle> |
Browser-Kompatibilität
Siehe auch
popoverHTML globaler Attribut- Popover API
- Verwandtes Ereignis:
toggle