⚡ 触发器

hx-trigger 属性控制何时发起请求:

标准事件

html
<!-- 点击(默认)-->
<button hx-get="/data" hx-trigger="click">点击</button>

<!-- 加载时 -->
<div hx-get="/data" hx-trigger="load"></div>

<!-- 输入时 -->
<input hx-get="/search" hx-trigger="input">

<!-- 变化时 -->
<select hx-get="/filter" hx-trigger="change">

<!-- 提交时 -->
<form hx-post="/submit" hx-trigger="submit">

特殊触发器

触发器说明
load元素加载时
revealed元素进入视口时
intersect元素与视口相交时
every 1s定时触发

🔧 修饰符

html
<!-- 延迟 -->
<input hx-get="/search" hx-trigger="input delay:500ms">

<!-- 防抖 -->
<input hx-get="/search" hx-trigger="input throttle:1s">

<!-- 只触发一次 -->
<div hx-get="/init" hx-trigger="load once"></div>

<!-- 条件 -->
<button hx-get="/data" hx-trigger="click[confirm('确定?')]">
  删除
</button>

<!-- 来自其他元素 -->
<div hx-get="/data" hx-trigger="click from:#btn"></div>
<button id="btn">触发</button>

📡 HTMX 事件

事件说明
htmx:abort中止请求
htmx:afterOnLoad请求完成后
htmx:afterProcessNode元素处理后
htmx:afterRequest请求后
htmx:afterSettleDOM 稳定后
htmx:afterSwapDOM 交换后
htmx:beforeOnLoad响应加载前
htmx:beforeRequest请求前
htmx:beforeSwapDOM 交换前
htmx:beforeSend发送前
htmx:configRequest配置请求
htmx:historyCacheError历史缓存错误
htmx:beforeHistoryUpdate历史更新前
htmx:load元素加载
htmx:noSSESourceErrorSSE 错误
htmx:onLoadError加载错误
htmx:oobAfterSwapOOB 交换后
htmx:oobBeforeSwapOOB 交换前
htmx:oobErrorNoTargetOOB 目标错误
htmx:prompt提示
htmx:pushedIntoHistory推入历史
htmx:responseError响应错误
htmx:sendAbort发送中止
htmx:sseErrorSSE 错误
htmx:stalled请求停滞
htmx:timeout超时
htmx:trigger触发请求
htmx:validate验证
htmx:validation:halted验证失败

🎧 监听事件

javascript
// 监听请求完成
document.body.addEventListener('htmx:afterRequest', function(evt) {
  console.log('请求完成', evt.detail.pathInfo.requestPath);
});

// 监听错误
document.body.addEventListener('htmx:responseError', function(evt) {
  console.error('请求失败', evt.detail.error);
});

// 使用 hx-on 内联监听
<div hx-get="/data" 
     hx-on:htmx:after-request="console.log('完成')">
</div>