事件 - htmx:oobAfterSwap
htmx:oobAfterSwap 是 HTMX 在处理服务器响应中的 OOB(Out-of-Band)更新 并将其成功替换到页面后,针对每个 OOB 节点单独触发的事件。
如果服务器返回的 HTML 中包含 hx-oob="true" 的部分,HTMX 会在把这些内容插入页面后,对每个这样的节点触发一次 htmx:oobAfterSwap 事件。
事件参数
- detail.elt - 发送请求的元素
- detail.shouldSwap - 是否交换内容(默认为true)
- detail.target - 交换的目标
- detail.fragment - 响应片段
使用场景
HTMX 支持你从一次请求中「同时更新多个 DOM 元素」,其中某些元素可以用 hx-oob 标记,不受主 hx-target 限制。
对这些 hx-oob 元素更新完毕后,会触发此事件,让你有机会在插入 DOM 后绑定事件或做额外处理。
示例:使用 OOB 更新通知栏
客户端 HTML
<!-- 正常点击按钮触发 hx-get 请求 -->
<button hx-get="/load-data" hx-target="#main" hx-swap="innerHTML">加载内容</button>
<!-- 通知栏,OOB 更新目标 -->
<div id="notification-bar"></div>
<script>
document.body.addEventListener("htmx:oobAfterSwap", function (event) {
const el = event.detail.target;
console.log("OOB 元素已替换:", el);
// 如果是通知栏,添加一个消失动画
if (el.id === "notification-bar") {
setTimeout(() => {
el.style.transition = "opacity 1s";
el.style.opacity = "0";
}, 3000);
}
});
</script>
服务端响应部分
<div id="main">
<p>这是主内容区域更新。</p>
</div>
<!-- OOB 更新通知栏 -->
<div id="notification-bar" hx-oob="true">
<strong>数据加载成功!</strong>
</div>