事件 - htmx:oobBeforeSwap
htmx:oobBeforeSwap 是一个 在 HTMX 执行 OOB(Out-Of-Band)内容交换前触发的事件。
当服务器返回的响应中包含 hx-oob 属性的元素(用于将内容插入非目标区域的 DOM 元素中),HTMX 在真正替换目标元素之前会触发该事件。
你可以:
-
检查要插入的内容;
-
修改它;
-
阻止该 OOB 替换行为(使用 event.preventDefault());
事件参数
- detail.elt - 发送请求的元素
- detail.shouldSwap - 是否交换内容(默认为true)
- detail.target - 交换的目标
- detail.fragment - 响应片段
示例:拦截并修改 OOB 替换内容
<!-- 页面上的通知栏 -->
<div id="notification">暂无消息</div>
<!-- 触发请求的按钮 -->
<button hx-get="/oob-message" hx-target="#content">加载并更新通知</button>
<!-- 假设 /oob-message 返回以下响应 -->
<!-- <div id="notification" hx-oob="true">系统将维护</div> -->
<script>
document.body.addEventListener("htmx:oobBeforeSwap", function (event) {
if (event.detail.target.id === "notification") {
// 添加样式或前缀
event.detail.content.innerHTML = "[拦截修改] " + event.detail.content.innerHTML;
// 或者你可以取消替换:
// event.preventDefault();
}
});
</script>
阻止某个 OOB 替换(高级用法)
document.body.addEventListener("htmx:oobBeforeSwap", function (event) {
if (event.detail.target.id === "notification") {
console.warn("阻止系统消息更新");
event.preventDefault(); // 阻止插入行为
}
});