HTMLDialogElement

Die HTMLDialogElement-Schnittstelle bietet Methoden zur Manipulation von <dialog>-Elementen. Sie übernimmt Eigenschaften und Methoden von der Schnittstelle HTMLElement.

EventTarget Node Element HTMLElement HTMLDialogElement

Instanz-Eigenschaften

Übernimmt auch Eigenschaften von ihrer Eltern-Schnittstelle, HTMLElement.

HTMLDialogElement.closedBy

Ein String, der den closedby-Attributwert des <dialog>-Elements setzt oder zurückgibt, was die Arten von Benutzeraktionen angibt, die zum Schließen des Dialogs verwendet werden können.

HTMLDialogElement.open

Ein boolescher Wert, der das HTML-Attribut open widerspiegelt und anzeigt, ob der Dialog zur Interaktion verfügbar ist.

HTMLDialogElement.returnValue

Ein String, der den Rückgabewert für den Dialog setzt oder zurückgibt.

Instanz-Methoden

Übernimmt auch Methoden von ihrer Eltern-Schnittstelle, HTMLElement.

HTMLDialogElement.close()

Schließt den Dialog. Ein optionaler String kann als Argument übergeben werden, der den returnValue des Dialogs aktualisiert.

HTMLDialogElement.requestClose()

Fordert das Schließen des Dialogs an. Ein optionaler String kann als Argument übergeben werden, der den returnValue des Dialogs aktualisiert.

HTMLDialogElement.show()

Zeigt den Dialog modellfrei an, d.h. es ist weiterhin eine Interaktion mit dem Inhalt außerhalb des Dialogs möglich.

HTMLDialogElement.showModal()

Zeigt den Dialog als Modal an, über das alle anderen möglicherweise vorhandenen Dialoge hinaus. Alles außerhalb des Dialogs ist inert und Interaktionen außerhalb des Dialogs werden blockiert.

Ereignisse

Übernimmt auch Ereignisse von ihrer Eltern-Schnittstelle, HTMLElement.

Hören Sie diesen Ereignissen mit addEventListener() zu oder weisen Sie einen Ereignis-Listener der oneventname-Eigenschaft dieser Schnittstelle zu.

cancel

Wird ausgelöst, wenn das Schließen des Dialogs angefordert wird, sei es mit der Escape-Taste oder über die Methode HTMLDialogElement.requestClose().

close

Wird ausgelöst, wenn der Dialog geschlossen wird, sei es mit der Escape-Taste, der Methode HTMLDialogElement.close() oder durch das Absenden eines Formulars innerhalb des Dialogs mit method="dialog".

Beispiele

Öffnen eines modalen Dialogs

Das folgende Beispiel zeigt einen Button, der beim Klicken die Funktion HTMLDialogElement.showModal() verwendet, um einen modalen <dialog> zu öffnen, der ein Formular enthält.

Wenn es geöffnet ist, wird alles außer dem Inhalt des modalen Dialogs inert. Sie können den Abbrechen-Button klicken, um den Dialog (über die Funktion HTMLDialogElement.close()) zu schließen oder das Formular über den Bestätigen-Button abschicken.

Das Beispiel zeigt, wie Sie alle „Zustandsänderungs“-Ereignisse verwenden können, die beim Dialog ausgelöst werden können: cancel und close sowie die geerbten Ereignisse beforetoggle und toggle.

HTML

html
<!-- pop-up dialog box, containing a form -->
<dialog id="favDialog">
  <form method="dialog">
    <p>
      <label for="favAnimal">Favorite animal:</label>
      <select id="favAnimal" name="favAnimal">
        <option></option>
        <option>Brine shrimp</option>
        <option>Red panda</option>
        <option>Spider monkey</option>
      </select>
    </p>
    <div>
      <button id="cancel" type="reset">Cancel</button>
      <button id="submit" type="submit">Confirm</button>
    </div>
  </form>
</dialog>

<div>
  <button id="updateDetails">Update details</button>
</div>

JavaScript

Den Dialog anzeigen

Der Code ruft zunächst Objekte für die <button>-Elemente, das <dialog>-Element und das <select>-Element ab. Anschließend wird ein Listener hinzugefügt, um die Funktion HTMLDialogElement.showModal() zu aufzurufen, wenn der Aktualisieren-Button geklickt wird.

js
const updateButton = document.getElementById("updateDetails");
const confirmButton = document.getElementById("submit");
const cancelButton = document.getElementById("cancel");
const dialog = document.getElementById("favDialog");
const selectElement = document.getElementById("favAnimal");

// Update button opens a modal dialog
updateButton.addEventListener("click", () => {
  dialog.showModal();
});
Abbrechen- und Bestätigen-Buttons

Als Nächstes fügen wir Listener für die click-Ereignisse der Bestätigen- und Abbrechen-Buttons hinzu. Die Handler rufen HTMLDialogElement.close() mit dem Auswahlwert (falls vorhanden) und ohne Wert auf, wodurch der Rückgabewert des Dialogs (HTMLDialogElement.returnValue) auf den Auswahlwert bzw. auf null gesetzt wird.

js
// Confirm button closes dialog if there is a selection.
confirmButton.addEventListener("click", () => {
  if (selectElement.value) {
    // Set dialog.returnValue to selected value
    dialog.close(selectElement.value);
  }
});

// Cancel button closes the dialog box
cancelButton.addEventListener("click", () => {
  dialog.close(); // Set dialog.returnValue to null
});

Das Aufrufen von close() löst auch das close-Ereignis aus, welches wir unten implementieren, indem wir den Rückgabewert des Dialogs protokollieren. Wenn der Bestätigen-Button geklickt wurde, sollte dies der im Dialog ausgewählte Wert sein, andernfalls sollte es null sein.

js
dialog.addEventListener("close", (event) => {
  log(`close_event: (dialog.returnValue: "${dialog.returnValue}")`);
});
Abbrechen-Ereignis

Das cancel-Ereignis wird ausgelöst, wenn „plattform-spezifische Methoden“ zum Schließen des Dialogs verwendet werden, wie z.B. die Esc-Taste. Es wird auch ausgelöst, wenn die Methode HTMLDialogElement.requestClose() aufgerufen wird. Das Ereignis ist „unterdrückbar“, was bedeutet, dass wir es verwenden könnten, um das Schließen des Dialogs zu verhindern. Hier behandeln wir das Abbrechen einfach als eine „Schließen“-Operation und setzen den HTMLDialogElement.returnValue auf "", um etwaige gesetzte Werte zu löschen.

js
dialog.addEventListener("cancel", (event) => {
  log(`cancel_event: (dialog.returnValue: "${dialog.returnValue}")`);
  dialog.returnValue = ""; // Reset value
});
Toggle-Ereignis

Das toggle-Ereignis (geerbt von HTMLElement) wird unmittelbar nach dem Öffnen oder Schließen eines Dialogs ausgelöst (aber vor dem closed-Ereignis).

Hier fügen wir einen Listener hinzu, um zu protokollieren, wann der Dialog geöffnet und geschlossen wird.

Hinweis: Die toggle- und beforetoggle-Ereignisse werden möglicherweise nicht bei Dialogelementen in allen Browsern ausgelöst. In diesen Browserversionen können Sie stattdessen die HTMLDialogElement.open-Eigenschaft überprüfen, nachdem Sie versucht haben, den Dialog zu öffnen/zu schließen.

js
dialog.addEventListener("toggle", (event) => {
  log(`toggle_event: Dialog ${event.newState}`);
});
Beforetoggle-Ereignis

Das beforetoggle-Ereignis (geerbt von HTMLElement) ist ein unterdrückbares Ereignis, das unmittelbar vor dem Öffnen oder Schließen eines Dialogs ausgelöst wird. Bei Bedarf kann dies verwendet werden, um zu verhindern, dass ein Dialog angezeigt wird, oder um Aktionen an anderen Elementen auszuführen, die vom Dialogzustand betroffen sind, wie z.B. das Hinzufügen von Klassen zu ihnen, um Animationen auszulösen.

In diesem Fall protokollieren wir einfach den alten und den neuen Zustand.

js
dialog.addEventListener("beforetoggle", (event) => {
  log(
    `beforetoggle event: oldState: ${event.oldState}, newState: ${event.newState}`,
  );

  // Call event.preventDefault() to prevent a dialog opening
  /*
    if (shouldCancel()) {
        event.preventDefault();
    }
  */
});

Ergebnis

Probieren Sie das folgende Beispiel aus. Beachten Sie, dass sowohl die Bestätigen- als auch die Abbrechen-Buttons dazu führen, dass das close-Ereignis ausgelöst wird und dass das Ergebnis die ausgewählte Dialogoption widerspiegeln sollte.

Spezifikationen

Specification
HTML
# htmldialogelement
HTML
# event-beforetoggle
HTML
# event-toggle

Browser-Kompatibilität

api.HTMLDialogElement

api.HTMLElement.beforetoggle_event.dialog_elements

api.HTMLElement.toggle_event.dialog_elements

Siehe auch

  • Das HTML-Element, das diese Schnittstelle implementiert: <dialog>.