Bootstrap Alert 默认关闭会移除DOM元素,需手动控制显隐、清理class并处理动画依赖以实现重复使用。
data-bs-dismiss="alert" 是关闭功能的开关,但会彻底移除 DOM 元素
bootstrap alert 默认点击关闭按钮后不是隐藏,而是把整个 <div class="alert"> 从页面中删掉。这意味着你无法再次 <code>show() 它,表单提交多次只弹一次就是这个原因。
- 必须加
alert-dismissible类,否则data-bs-dismiss="alert"不生效 -
role="alert"和aria-label="Close"别漏,影响可访问性 - Bootstrap 5+ 已弃用 jQuery,
data-dismiss要写成data-bs-dismiss
想重复使用 Alert?别依赖默认关闭,改用 hide() + reset
如果你需要“每次提交都弹同一个提示框”,就得绕过 Bootstrap 的自动销毁逻辑——把关闭按钮的 data-bs-dismiss="alert" 去掉,换成手动控制显示/隐藏状态。
- 用
classList.add("d-none")隐藏,而不是close()方法 - 每次要显示前,先
classList.remove("d-none"),再确保内容已更新(比如清空旧文本、重设 class) - 避免直接操作
style.display = "none",它和 Bootstrap 的 fade 动画冲突
确认式关闭:用 JavaScript 拦截默认行为
当警告内容涉及关键操作(如“删除不可恢复”),不能一点就关,得加二次确认。这时候不能靠 data-bs-dismiss 自动触发,得自己接管。
- 关闭按钮上只留
onclick="confirmDismiss()",去掉data-bs-dismiss - 在
confirmDismiss()里调用bootstrap.Alert.getInstance(el).close()显式关闭 - “取消”按钮用
data-bs-dismiss="alert"即可,它不执行业务逻辑,只收起提示
动态更新 Alert 内容时,class 切换要手动清理
Alert 类型(success / danger / warning)靠 class 控制,但 Bootstrap 不会自动帮你删旧 class。如果只加新 class,可能多个主题同时生效,颜色错乱。
- 更新内容前,先用
el.classList.remove("alert-success", "alert-danger", "alert-warning") - 再用
el.classList.add("alert-info")设置目标类型 - 注意:Bootstrap 5.3+ 的
alert-dismissible必须配合fade show才有淡入动画,单独加show会无过渡











