hx-on
hx-on*
属性允许您直接在元素上内嵌脚本以响应事件;类似于 HTML 中的 onevent
属性,例如 onClick
。
hx-on*
属性通过支持处理任意 JavaScript 事件改进了 onevent
,增强了 行为局部性 (LoB),即使处理非标准 DOM 事件时也是如此。例如,这些属性允许您处理 htmx 事件。
使用 hx-on
属性时,您需要在冒号后指定事件名称作为属性名的一部分。例如,如果您想响应 click
事件,应使用 hx-on:click
属性:
<div hx-on:click="alert('Clicked!')">Click</div>
请注意,此语法不仅适用于标准 DOM 事件,也可用于捕获所有 htmx 事件及大多数其他自定义事件。
需注意:DOM 属性不保留大小写。这意味着像 hx-on:htmx:beforeRequest
这样的属性 将无法工作,因为 DOM 会将属性名转为小写。幸运的是,htmx 同时支持驼峰式事件名和 短横线式事件名,因此您可以使用 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
属性值将被忽略。但两种形式可在同一文档中混合使用