概述原生 `dialog` 元素提供模态与非模态对话能力,结合内置的焦点捕获与返回值机制,可替代繁琐的自定义弹层与表单确认流程。关键参数与概念`HTMLDialogElement.show()/showModal()/close(returnValue)`: 打开非/模态对话框并关闭时返回值。表单协作:`formmethod="dialog"` 可在对话框内部提交后自动关闭并设置返回值。可访问性:模态时应限制背景交互、管理焦点与键盘导航(Esc 关闭)。实践示例<button id="open">删除项目</button>

<dialog id="confirm">

<form method="dialog">

<p>确定要删除该项目吗?此操作不可撤销。</p>

<menu>

<button value="cancel">取消</button>

<button value="ok">确认删除</button>

</menu>

</form>

</dialog>

<script>

const dlg = document.getElementById('confirm')

document.getElementById('open').addEventListener('click', () => dlg.showModal())

dlg.addEventListener('close', () => {

if (dlg.returnValue === 'ok') {

// 执行删除

console.log('删除确认')

}

})

</script>

焦点与样式打开后将焦点移入对话框的第一个可聚焦元素;关闭后焦点回到触发源。通过 `::backdrop` 自定义遮罩样式:dialog::backdrop { background: rgba(0,0,0,.25); backdrop-filter: blur(2px); }

验证方法兼容性:Chromium/Firefox/Safari 高版本验证;不支持时回退到自定义弹层(`position: fixed` + 焦点管理)。可访问性:检查 Tab 环路、Esc 关闭、屏幕阅读器读出标题与内容。返回值:验证 `close(returnValue)` 与 `formmethod="dialog"` 的协同行为。注意事项模态对话应避免阻塞长计算;对话内容精简、操作明确。避免嵌套多个模态导致焦点混乱;统一关闭策略与外部点击处理。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部