html 原生对话框元素 <dialog>
大约 4 分钟...
<dialog>:对话框元素[1]
HTML <dialog> 元素表示一个对话框或其他交互式组件,例如一个可关闭警告、检查器或者窗口。
(查看浏览器兼容性[2])
属性
- open
指示这个对话框是激活的和能互动的。当没有设置open
属性时,对话框不应该显示给用户。推荐使用.show()
或.showModal()
方法来渲染对话框,而不是使用open
属性。
示例
简单示例
下面的示例会渲染一个非模态对话框。在对话框激活的状态下,点击“OK”按钮将会关闭对话框。提供一种机制来关闭 dialog
元素中的对话框是很重要的。例如,Esc
键在默认情况下不会关闭非模态对话框,同时也不能假设用户可以使用一个物理键盘(例如,使用不带物理键盘的触摸屏设备)。
简单示例
页面区域
<dialog open>
<h4>dialog 区域</h4>
<p>Greetings, one and all!</p>
<p>点击“OK”关闭当前dialog</p>
<form method="dialog">
<button>OK</button>
</form>
</dialog>
.code-demo-app {
background: #eee;
height: 250px;
}
高级示例
当单击“Update details”按钮时,此示例打开一个包含一个表单的弹出对话框。
查看代码
<!-- Simple modal dialog containing a form -->
<dialog id="favDialog">
<form method="dialog">
<p>
<label>
Favorite animal:
<select>
<option value="default">Choose…</option>
<option>Brine shrimp</option>
<option>Red panda</option>
<option>Spider monkey</option>
</select>
</label>
</p>
<div>
<button value="cancel">Cancel</button>
<button id="confirmBtn" value="default">Confirm</button>
</div>
</form>
</dialog>
<p>
<button id="updateDetails">Update details</button>
</p>
<output></output>
const updateButton = document.getElementById("updateDetails");
const favDialog = document.getElementById("favDialog");
const outputBox = document.querySelector("output");
const selectEl = favDialog.querySelector("select");
const confirmBtn = favDialog.querySelector("#confirmBtn");
// If a browser doesn't support the dialog, then hide the
// dialog contents by default.
if (typeof favDialog.showModal !== "function") {
favDialog.hidden = true;
/* a fallback script to allow this dialog/form to function
for legacy browsers that do not support <dialog>
could be provided here.
*/
}
// "Update details" button opens the <dialog> modally
updateButton.addEventListener("click", () => {
if (typeof favDialog.showModal === "function") {
favDialog.showModal();
} else {
outputBox.value =
"Sorry, the <dialog> API is not supported by this browser.";
}
});
// "Favorite animal" input sets the value of the submit button
selectEl.addEventListener("change", (e) => {
confirmBtn.value = selectEl.value;
});
// "Confirm" button of form triggers "close" on dialog because of [method="dialog"]
favDialog.addEventListener("close", () => {
outputBox.value = `${
favDialog.returnValue
} button clicked - ${new Date().toString()}`;
});
MDN <dialog>:对话框元素 ↩︎