HTMLDialogElement
Die HTMLDialogElement
-Schnittstelle bietet Methoden zur Manipulation von <dialog>
-Elementen. Sie erbt Eigenschaften und Methoden von der HTMLElement
-Schnittstelle.
Instanzeigenschaften
Erbt auch Eigenschaften von ihrer Elternschnittstelle, HTMLElement
.
HTMLDialogElement.closedBy
-
Ein String, der den Wert des
closedby
-Attributs des<dialog>
-Elements festlegt oder zurückgibt, welches die Arten von Benutzeraktionen angibt, die zum Schließen des Dialogs verwendet werden können. HTMLDialogElement.open
-
Ein boolescher Wert, der das
open
-HTML-Attribut widerspiegelt und angibt, ob der Dialog für Interaktionen verfügbar ist. HTMLDialogElement.returnValue
-
Ein String, der den Rückgabewert für den Dialog festlegt oder zurückgibt.
Instanzmethoden
Erbt auch Methoden von ihrer Elternschnittstelle, 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. er erlaubt weiterhin Interaktionen mit dem Inhalt außerhalb des Dialogs.
HTMLDialogElement.showModal()
-
Zeigt den Dialog als Modal an, über allen anderen möglicherweise vorhandenen Dialogen. Alles außerhalb des Dialogs ist inert und Interaktionen außerhalb des Dialogs sind blockiert.
Ereignisse
Erbt auch Ereignisse von ihrer Elternschnittstelle, HTMLElement
.
Diese Ereignisse können Sie mit addEventListener()
abhören oder einen Ereignis-Listener der oneventname
-Eigenschaft dieser Schnittstelle zuweisen.
cancel
-
Wird ausgelöst, wenn der Dialog geschlossen werden soll, entweder mit der Escape-Taste oder über die Methode
HTMLDialogElement.requestClose()
. close
-
Wird ausgelöst, wenn der Dialog geschlossen wird, entweder mit der Escape-Taste, der Methode
HTMLDialogElement.close()
oder durch das Absenden eines Formulars innerhalb des Dialogs mitmethod="dialog"
.
Beispiele
Öffnen eines modalen Dialogs
Das folgende Beispiel zeigt einen Button, der beim Klicken die Funktion HTMLDialogElement.showModal()
verwendet, um ein modales <dialog>
mit einem Formular zu öffnen.
Während der Dialog geöffnet ist, ist alles andere als der Inhalt des modalen Dialogs inert.
Sie können den Abbrechen-Button klicken, um den Dialog zu schließen (über die Funktion HTMLDialogElement.close()
), oder das Formular über den Bestätigen-Button absenden.
Das Beispiel demonstriert, wie Sie alle "Zustandsänderungs"-Ereignisse nutzen können, die im Dialog ausgelöst werden können: cancel
und close
sowie die geerbten Ereignisse beforetoggle
und toggle
.
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 ruft zuerst Objekte für die <button>
-Elemente, das <dialog>
-Element und das <select>
-Element ab.
Dann wird ein Listener hinzugefügt, um die Funktion HTMLDialogElement.showModal()
aufzurufen, wenn der Aktualisieren-Button angeklickt wird.
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();
});
Bestätigen- und Abbrechen-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, was den Rückgabewert des Dialogs (HTMLDialogElement.returnValue
) auf den Auswahlwert und null
setzt.
// 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 loggen.
Wenn der Bestätigen-Button geklickt wurde, sollte dies der ausgewählte Wert im Dialog sein, andernfalls sollte es null
sein.
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 den Dialog zu schließen, wie z.B. die Esc-Taste.
Es wird auch ausgelöst, wenn die Methode HTMLDialogElement.requestClose()
aufgerufen wird.
Das Ereignis ist „abbrechbar“, was bedeutet, dass wir damit verhindern könnten, dass der Dialog geschlossen wird.
Hier behandeln wir das Abbrechen einfach als „Schließen“-Vorgang und setzen den HTMLDialogElement.returnValue
auf ""
zurück, um einen gesetzten Wert zu löschen.
dialog.addEventListener("cancel", (event) => {
log(`cancel_event: (dialog.returnValue: "${dialog.returnValue}")`);
dialog.returnValue = ""; // Reset value
});
Umschalten-Ereignis
Das toggle
event (geerbt von HTMLElement
) wird direkt nach dem Öffnen oder Schließen eines Dialogs ausgelöst (aber vor dem closed
-Ereignis).
Hier fügen wir einen Listener hinzu, um zu loggen, 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 Eigenschaft HTMLDialogElement.open
überprüfen, nachdem Sie versucht haben, den Dialog zu öffnen oder zu schließen.
dialog.addEventListener("toggle", (event) => {
log(`toggle_event: Dialog ${event.newState}`);
});
Bevor-Umschalten-Ereignis
Das beforetoggle
event (geerbt von HTMLElement
) ist ein abbrechbares Ereignis, das unmittelbar vor dem Öffnen oder Schließen eines Dialogs ausgelöst wird.
Bei Bedarf kann es verwendet werden, um zu verhindern, dass ein Dialog angezeigt wird, oder um Aktionen an anderen Elementen auszuführen, die vom Öffnungs-/Schließzustand des Dialogs betroffen sind, wie z.B. das Hinzufügen von Klassen zu ihnen, um Animationen auszulösen.
In diesem Fall loggen wir einfach den alten und neuen Zustand.
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 Buttons Bestätigen
als auch Abbrechen
dazu führen, dass das close
-Ereignis ausgelöst wird und 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>
.