hx-on
hx-on*
属性允许您内嵌脚本,以直接对元素上的事件做出响应;类似于 HTML 中的 onevent
属性,例如 onClick
。
hx-on*
属性在 onevent
的基础上进行了改进,它能够处理任何任意 JavaScript 事件,从而即使在处理非标准 DOM 事件时,也能实现更强的 行为局部性 (LoB)。例如,这些属性允许您处理 htmx 事件。
使用 hx-on
属性,您需要在属性名后加上冒号来指定事件名称。例如,如果您想对 click
事件做出响应,您应该使用 hx-on:click
属性。
<div hx-on:click="alert('Clicked!')">Click</div>
请注意,此语法除了用于捕获所有 htmx 事件和大多数其他自定义事件外,还可用于捕获标准 DOM 事件。
需要注意的是,DOM 属性不保留大小写。这意味着,不幸的是,像 hx-on:htmx:beforeRequest
这样的属性将 **无法工作**,因为 DOM 会将属性名称转换为小写。幸运的是,htmx 支持驼峰式事件名称和 短横线分隔式事件名称,因此您可以使用 hx-on:htmx:before-request
代替。
为了使 htmx 基于的事件处理程序的编写更加容易,您可以使用双冒号 hx-on::
作为 htmx 事件的简写,并省略“htmx”部分。
<!-- These two are equivalent -->
<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>
最后,为了使此功能与一些不支持在 HTML 属性中使用冒号 (:
) 的模板语言(例如 JSX)兼容,您可以在长格式和简写格式中使用短横线代替冒号。
<!-- These two are equivalent -->
<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
属性的值将被忽略。但是,两种形式可以在同一个文档中混合使用。