HTMLDialogElement

Das HTMLDialogElement-Interface bietet Methoden zum Manipulieren von <dialog>-Elementen. Es erbt Eigenschaften und Methoden von der HTMLElement-Schnittstelle.

EventTarget Node Element HTMLElement HTMLDialogElement

Instanz-Eigenschaften

Erbt auch Eigenschaften von seiner Elternschnittstelle, HTMLElement.

HTMLDialogElement.open

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

HTMLDialogElement.returnValue

Ein String, der den Rückgabewert des Dialogs setzt oder zurückgibt.

Instanz-Methoden

Erbt auch Methoden von seiner Elternschnittstelle, HTMLElement.

HTMLDialogElement.close()

Schließt das Dialogfeld. Ein optionaler String kann als Argument übergeben werden, um den returnValue des Dialogs zu aktualisieren.

HTMLDialogElement.requestClose() Experimentell

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

HTMLDialogElement.show()

Zeigt das Dialogfeld modeless an, d. h. erlaubt weiterhin die Interaktion mit Inhalten außerhalb des Dialogs.

HTMLDialogElement.showModal()

Zeigt das Dialogfeld als Modal an, über anderen möglicherweise vorhandenen Dialogen. Alles außerhalb des Dialogs ist inert, wobei Interaktionen außerhalb des Dialogs blockiert sind.

Ereignisse

Erbt auch Ereignisse von seiner Elternschnittstelle, HTMLElement.

Hören Sie auf diese Ereignisse mit addEventListener() oder durch Zuweisen eines Ereignis-Listeners zur oneventname-Eigenschaft dieser Schnittstelle.

cancel

Wird ausgelöst, wenn das Dialogfeld geschlossen werden soll, sei es mit der Escape-Taste oder über die HTMLDialogElement.requestClose()-Methode.

close

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

Beispiele

Öffnen eines modalen Dialogs

Das folgende Beispiel zeigt eine Schaltfläche, die beim Anklicken die HTMLDialogElement.showModal()-Funktion verwendet, um ein modales <dialog> mit einem Formular zu öffnen.

Während es geöffnet ist, ist alles außer den Inhalten des modalen Dialogs inert. Sie können die Abbrechen-Schaltfläche anklicken, um den Dialog zu schließen (über die HTMLDialogElement.close()-Funktion), oder das Formular über die Bestätigen-Schaltfläche absenden.

Das Beispiel zeigt, wie Sie alle "Zustandsänderungs"-Ereignisse nutzen können, die auf dem 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

Anzeigen des Dialogs

Der Code erhält zuerst Objekte für die <button>-Elemente, das <dialog>-Element und das <select>-Element. Dann wird ein Listener hinzugefügt, um die HTMLDialogElement.showModal()-Funktion aufzurufen, wenn die Aktualisieren-Schaltfläche angeklickt 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-Schaltflächen

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

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
});

Der Aufruf von close() löst auch das close-Ereignis aus, das wir unten implementieren, indem wir den Rückgabewert des Dialogs protokollieren. Wenn die Bestätigen-Schaltfläche angeklickt wurde, sollte dies der ausgewählte Wert im Dialog 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" verwendet werden, um das Dialogfeld zu schließen, wie die Esc-Taste. Es wird auch ausgelöst, wenn die HTMLDialogElement.requestClose()-Methode aufgerufen wird. Das Ereignis ist "abbrechbar", was bedeutet, dass wir es verwenden könnten, um das Schließen des Dialogs zu verhindern. Hier behandeln wir den Abbruch einfach als "Schließen"-Vorgang und setzen den HTMLDialogElement.returnValue auf "", um jeden möglicherweise gesetzten Wert zu löschen.

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

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

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 in allen Browsern auf Dialogelementen ausgelöst. In diesen Browserversionen können Sie stattdessen die HTMLDialogElement.open-Eigenschaft nach dem Versuch, den Dialog zu öffnen/schließen, überprüfen.

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

Das beforetoggle-Ereignis (von HTMLElement geerbt) ist ein abbrechbares Ereignis, das unmittelbar vor dem Öffnen oder Schließen eines Dialogs ausgelöst wird. Falls nötig, kann dies verwendet werden, um das Anzeigen eines Dialogs zu verhindern oder um Aktionen bei anderen Elementen auszuführen, die vom Dialog-Öffnen/Schließen-Zustand betroffen sind, z. B. um Klassen hinzuzufügen, um Animationen auszulösen.

In diesem Fall protokollieren wir einfach den alten und 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 Beispiel unten aus. Beachten Sie, dass sowohl die Bestätigen- als auch die Abbrechen-Schaltflächen das close-Ereignis auslösen 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

BCD tables only load in the browser

api.HTMLElement.beforetoggle_event.dialog_elements

BCD tables only load in the browser

api.HTMLElement.toggle_event.dialog_elements

BCD tables only load in the browser

Siehe auch

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