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
Weitgehend verfügbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2024 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

Das beforetoggle-Ereignis der HTMLElement-Schnittstelle wird bei einem Popover- oder <dialog>-Element ausgelöst, unmittelbar bevor es angezeigt oder ausgeblendet wird.

  • Wenn das Element vom ausgeblendeten in den angezeigten Zustand wechselt, wird die Eigenschaft event.oldState auf closed und die Eigenschaft event.newState auf open gesetzt.
  • Wenn das Element vom angezeigten in den ausgeblendeten Zustand wechselt, ist event.oldState gleich open und event.newState gleich closed.

Dieses Ereignis kann abgebrochen werden, wenn ein Element geöffnet („angezeigt“) wird, nicht jedoch, wenn es geschlossen wird.

Sie können dieses Ereignis unter anderem verwenden, um:

  • zu verhindern, dass ein Element angezeigt wird.
  • Klassen oder Eigenschaften des Elements oder zugehöriger Elemente hinzuzufügen oder zu entfernen, beispielsweise um die Animation beim Öffnen und Schließen eines Dialogs zu steuern.
  • den Zustand des Elements vor dem Öffnen oder nach dem Ausblenden zurückzusetzen, beispielsweise um ein Dialogformular und dessen Rückgabewert zurückzusetzen oder beim erneuten Öffnen eines Popups darin verschachtelte manuelle Popover auszublenden.

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

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

Alternativ können Sie ihn der Ereignishandler-Eigenschaft der Schnittstelle zuweisen:

js
onbeforetoggle = (event) => { }

Ereignistyp

Ein ToggleEvent. Erbt von Event.

Event ToggleEvent

Beispiele

Die folgenden Beispiele zeigen, wie das beforetoggle-Ereignis für ein Popover-Element verwendet werden kann. Dieselben Beispiele funktionieren in ähnlicher Weise mit einem <dialog>-Element.

Einfaches Beispiel

Dieses Beispiel zeigt, wie Sie auf das beforetoggle-Ereignis reagieren und das Ergebnis protokollieren können.

HTML

Das HTML besteht aus einem Popover und einer Schaltfläche, mit der es geöffnet und geschlossen werden kann.

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

Öffnen eines Popovers verhindern

Das beforetoggle-Ereignis kann abgebrochen werden, wenn es beim Öffnen eines Elements ausgelöst wird.

Im Folgenden zeigen wir, wie ein Popover zunächst prüfen kann, ob es geöffnet werden darf, und andernfalls mit Event.preventDefault() das Ereignis abbricht. In diesem Beispiel legen wir über ein Kontrollkästchen fest, ob das Popover geöffnet werden darf. In einem umfangreicheren Beispiel könnte dies vom Zustand der Anwendung abhängen oder davon, ob die Daten im Popover zur Anzeige bereit sind.

HTML

Das HTML besteht aus einem Popover, einer Schaltfläche zum Öffnen und Schließen sowie einem Kontrollkästchen, mit dem festgelegt wird, ob das Popover geöffnet werden darf.

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

Zunächst richten wir den Code so ein, dass er einen Zustand simuliert, in dem das Öffnen des Popovers erlaubt ist. Diesen Zustand stellt die Variable allowOpen dar, deren Wert sich ändert, wenn das zugehörige Kontrollkästchen aktiviert oder deaktiviert 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. Dadurch wird verhindert, dass sich das Popover öffnet.

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

Weitere Beispiele

Spezifikationen

Spezifikation
HTML
# event-beforetoggle

Browser-Kompatibilität

Siehe auch