HTMLDialogElement
Интерфейс HTMLDialogElement предоставляет методы для управления элементами <dialog>. Он наследует свойства и методы от интерфейса HTMLElement.
Свойства экземпляра
Также наследует свойства от родительского интерфейса HTMLElement.
HTMLDialogElement.open-
Булевое значение, отражающее атрибут HTML
open, указывающее, доступен ли диалог для взаимодействия. HTMLDialogElement.returnValue-
Строка, которая устанавливает или возвращает значение возврата для диалога.
Методы экземпляра
Также наследует методы от родительского интерфейса HTMLElement.
HTMLDialogElement.close()-
Закрывает диалог. В качестве аргумента можно передать необязательную строку, обновляющую
returnValueдиалога. HTMLDialogElement.show()-
Отображает диалог в бескомнатном режиме, то есть по-прежнему позволяя взаимодействовать с содержимым вне диалога.
HTMLDialogElement.showModal()-
Отображает диалог в модальном режиме поверх всех других присутствующих диалогов. Всё за пределами диалога считается неактивным, взаимодействия вне диалога заблокированы.
События
Также наследует события от родительского интерфейса HTMLElement.
Подпишитесь на эти события с помощью addEventListener() или назначив обработчик событий свойству oneventname этого интерфейса.
cancel-
Срабатывает, когда пользователь закрывает текущий открытый диалог клавишей Esc.
close-
Срабатывает при закрытии диалога, независимо от того, было это сделано с помощью клавиши Esc, метода
HTMLDialogElement.close()или путем отправки формы внутри диалога с использованиемmethod="dialog".
Примеры
Открытие модального диалога
В следующем примере показана кнопка, которая при нажатии использует функцию HTMLDialogElement.showModal() для открытия модального <dialog> содержащего форму.
Пока диалог открыт, всё кроме содержимого модального диалога неактивно. Можно нажать кнопку Отмена для закрытия диалога (с помощью функции HTMLDialogElement.close()) или отправить форму через кнопку Подтвердить.
Пример демонстрирует, как можно использовать все события «изменения состояния», которые могут быть сгенерированы диалогом: cancel и close, а также унаследованные события beforetoggle и 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
Отображение диалога
Код сначала получает объекты для элементов <button>, элемента <dialog> и элемента <select>. Затем он добавляет обработчик, который вызывает функцию HTMLDialogElement.showModal() при нажатии кнопки Обновить.
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();
});
Кнопки Отмена и Подтвердить
Далее мы добавляем обработчики событий для кнопок Подтвердить и Отмена click. Обработчики вызывают HTMLDialogElement.close() с значением выбора (если оно есть) и без значения, что в свою очередь устанавливает значение возврата диалога (HTMLDialogElement.returnValue) соответственно со значением выбора и null, соответственно.
// 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
});
Вызов close() также генерирует событие close, которое мы реализуем ниже, регистрируя значение возврата диалога. Если была нажата кнопка Подтвердить, это должно быть выбранное значение в диалоге, в противном случае null.
dialog.addEventListener("close", (event) => {
log(`close_event: (dialog.returnValue: "${dialog.returnValue}")`);
});
Событие Отмена
Событие cancel срабатывает, когда используются платформенно-специфичные методы для закрытия диалога, такие как нажатие клавиши Esc. Событие «отменяемое», что означает, что мы можем использовать его для предотвращения закрытия диалога. Здесь мы просто обрабатываем отмену как операцию «закрыть» и сбрасываем HTMLDialogElement.returnValue до "" для очистки любого установленного значения.
dialog.addEventListener("cancel", (event) => {
log(`cancel_event: (dialog.returnValue: "${dialog.returnValue}")`);
dialog.returnValue = ""; //Reset value
});
Событие Переключение
toggle событие (унаследованное от HTMLElement) генерируется сразу после открытия или закрытия диалога (но до события closed).
Здесь мы добавляем обработчик для записи, когда диалог открывается и закрывается.
Примечание: События toggle и beforetoggle могут не срабатывать на элементах диалога во всех браузерах. В этих версиях браузеров можно вместо этого проверить свойство HTMLDialogElement.open после попытки открыть/закрыть диалог.
dialog.addEventListener("toggle", (event) => {
log(`toggle_event: Dialog ${event.newState}`);
});
Событие перед переключением
beforetoggle событие (унаследованное от HTMLElement) — это отменяемое событие, которое генерируется непосредственно перед открытием или закрытием диалога. При необходимости его можно использовать для предотвращения отображения диалога или для выполнения действий с другими элементами, которые зависят от состояния открытия/закрытия диалога, например, для добавления классов для запуска анимаций.
В данном случае мы просто записываем старое и новое состояние.
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();
}
*/
});
Результат
Попробуйте пример ниже. Обратите внимание, что нажатие на обе кнопки Confirm и Cancel приводит к срабатыванию события close и что результат должен отражать выбранный параметр в диалоге.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
HTMLDialogElement |
132 | 132 | 133 | 117 | Нет | 132 | 133 | Нет | Нет | Нет | 132 |
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
HTMLDialogElement |
132 | 132 | 133 | 117 | Нет | 132 | 133 | Нет | Нет | Нет | 132 |
| Рабочий стол | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
HTMLDialogElement |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
cancel_event |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
close |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
close_event |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
open |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
returnValue |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
show |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
showModal |
37 | 79 | 98 | 24 | 15.4 | 37 | 98 | 24 | 15.4 | 3.0 | 37 |
api.HTMLDialogElement
Таблицы BCD загружаются только в браузере
api.HTMLElement.beforetoggle_event.dialog_elements
Таблицы BCD загружаются только в браузере
api.HTMLElement.toggle_event.dialog_elements
Таблицы BCD загружаются только в браузере
См. также
- Элемент HTML, реализующий этот интерфейс:
<dialog>.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement