hx-onhx-on* 属性允许您将脚本嵌入内联,以直接响应元素上的事件;类似于 HTML 中找到的
onevent 属性,例如 onClick。
hx-on* 属性改进了 onevent,通过启用处理任何任意 JavaScript 事件,
从而增强了 Locality of Behaviour (LoB),即使处理非标准 DOM 事件。例如,这些
属性允许您处理 htmx 事件。
使用 hx-on 属性,您可以将事件名称指定为属性名称的一部分,在冒号之后。所以,例如,如果
您想响应 click 事件,您将使用属性 hx-on:click:
<div hx-on:click="alert('Clicked!')">Click</div>
请注意,此语法可用于捕获所有 htmx 事件,以及大多数其他自定义事件,除了 标准 DOM 事件之外。
需要注意的一个问题是 DOM 属性不保留大小写。这意味着不幸的是,像
hx-on:htmx:beforeRequest 这样的属性 将不起作用,因为 DOM 会将属性名称小写。幸运的是,htmx 支持
驼峰式事件名称以及 kebab-case 事件名称,因此您可以使用 hx-on:htmx:before-request 代替。
为了使编写基于 htmx 的事件处理程序更容易一些,您可以使用简写双冒号 hx-on:: 来表示 htmx
事件,并省略 “htmx” 部分:
<!-- 这两个是等效的 -->
<button hx-get="/info" hx-on:htmx:before-request="alert('Making a request!')">
Get Info!
</button>
<button hx-get="/info" hx-on::before-request="alert('Making a request!')">
Get Info!
</button>
如果您希望处理多个不同事件,您只需在元素上添加多个属性:
<button hx-get="/info"
hx-on::before-request="alert('Making a request!')"
hx-on::after-request="alert('Done making a request!')">
Get Info!
</button>
最后,为了使此功能与某些模板语言兼容(例如 JSX),这些语言不喜欢在 HTML 属性中使用冒号 (:)
,您可以使用破折号代替冒号,既适用于长形式,也适用于简写形式:
<!-- 这两个是等效的 -->
<button hx-get="/info" hx-on-htmx-before-request="alert('Making a request!')">
Get Info!
</button>
<button hx-get="/info" hx-on--before-request="alert('Making a request!')">
Get Info!
</button>
其值是一个事件名称,后跟冒号 :,然后是脚本:
<button hx-get="/info" hx-on="htmx:beforeRequest: alert('Making a request!')">
Get Info!
</button>
可以通过在新行上放置它们来定义多个处理程序:
<button hx-get="/info" hx-on="htmx:beforeRequest: alert('Making a request!')
htmx:afterRequest: alert('Done making a request!')">
Get Info!
</button>
与 onevent 类似,向事件处理程序脚本提供了两个符号:
this - 定义 hx-on 属性的元素event - 触发处理程序的事件hx-on 不会 被继承,但是由于
事件冒泡,
父元素上的 hx-on 属性通常会被子元素上的事件触发hx-on:* 和 hx-on 不能在同一元素上一起使用;如果存在 hx-on:*,则同一元素上的 hx-on 属性的值
将被忽略。但是,这两种形式可以在同一文档中混合使用。