必须同时设置 data-bs-backdrop="static" 和 data-bs-keyboard="false" 才能彻底禁用模态框关闭:前者阻止点击背景关闭,后者禁用 ESC 键关闭;仅设其一或使用错误值(如 false、漏 bs- 前缀)均会导致意外关闭。

data-bs-backdrop="static" 是唯一可靠写法
Bootstrap 5 中,想让 Modal 点击灰色遮罩(backdrop)不关闭,必须用 data-bs-backdrop="static"。别写成 data-backdrop="static"(漏了 bs- 前缀)、也别写成 data-bs-backdrop="false"(这会直接删掉遮罩 DOM 节点,模态框“悬空”且可能因 focus trap 意外关闭)。
这个属性的语义很明确:“static” = 有遮罩、不响应点击;不是布尔开关,也不是禁用指令。
-
data-bs-backdrop="true":默认值,点哪都关 -
data-bs-backdrop="false":遮罩消失,模态框失去视觉隔离,还可能触发滚动穿透或焦点异常 -
data-bs-backdrop="static":遮罩保留,点击无效——这才是你要的效果
必须同步禁用 ESC 键:data-bs-keyboard="false"
只设 data-bs-backdrop="static" 不够。用户仍可用键盘按 ESC 关闭模态框,这在表单提交中途、确认弹窗等场景下是严重干扰。
所以 HTML 属性里要配对出现:
<div class="modal fade" id="confirmModal" data-bs-backdrop="static" data-bs-keyboard="false">
JS 初始化时同理:
const myModal = new bootstrap.Modal(document.getElementById('confirmModal'), {<br> backdrop: 'static',<br> keyboard: false<br>});
漏掉 keyboard: false 或写成 keyboard: 'false'(字符串)都会失效。
为什么 jQuery 写法 $('#modal').modal({ backdrop: 'static' }) 有时不生效
常见原因是 DOM 初始化时机不对:如果 JS 在 modal 元素还没被解析进 DOM 时就执行初始化,Bootstrap 会静默失败,回退到默认行为。
更稳妥的做法是确保元素存在后再调用:
- 把脚本放在


















