事件 - htmx:trigger
每当有 AJAX 请求时,即使未指定 AJAX 请求,也会触发此事件。它主要用于允许 hx-trigger 执行客户端脚本,令到 AJAX 请求有更细粒度的事件可用,例如 htmx:beforeRequest 或htmx:afterRequest。
事件参数
- detail.elt - 触发请求的元素
示例:记录触发的事件类型
<button hx-get="/data" hx-target="#result">点击加载数据</button>
<div id="result"></div>
<script>
document.body.addEventListener("htmx:trigger", function (event) {
const original = event.detail.triggeringEvent;
if (original) {
console.log("HTMX 被触发,事件类型为:", original.type);
} else {
console.log("HTMX 被非标准方式触发(如调用 htmx.trigger)");
}
});
</script>
示例:阻止 HTMX 请求(条件阻止)
<button hx-post="/dangerous" hx-trigger="click" hx-target="#result">敏感操作</button>
<script>
document.body.addEventListener("htmx:trigger", function (event) {
if (event.detail.target.getAttribute("hx-post") === "/dangerous") {
const ok = confirm("你确定要执行这个操作吗?");
if (!ok) {
event.preventDefault(); // 阻止后续请求
console.warn("操作被用户取消");
}
}
});
</script>
示例:和自定义事件配合使用(htmx.trigger(...))
<button onclick="sendCustom()">发送自定义事件</button>
<div id="box" hx-get="/something" hx-trigger="myEvent">监听 myEvent</div>
<script>
function sendCustom() {
htmx.trigger("#box", "myEvent");
}
document.body.addEventListener("htmx:trigger", function (event) {
console.log("触发器类型:", event.detail.triggeringEvent?.type || "非原生事件");
console.log("触发目标元素:", event.detail.target);
});
</script>