Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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.oldState auf closed gesetzt und die Eigenschaft event.newState wird auf open gesetzt.
  • Wenn das Element von sichtbar zu versteckt wechselt, dann ist event.oldState open und event.newState closed.

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.

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

onbeforetoggle = (event) => { }

Ereignistyp

Ein ToggleEvent. Erbt von Event.

Event ToggleEvent

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.

html
<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.

js
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.

html
<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.

js
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.

js
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:

js
popover.addEventListener("beforetoggle", () => {
  // …
});

popover.showPopover();
popover.hidePopover();
// `beforetoggle` only fires once

Weitere Beispiele

Spezifikationen

Specification
HTML
# event-beforetoggle

Browser-Kompatibilität

Siehe auch