hx-on

hx-on* 属性允许你以嵌入脚本的形式直接响应元素上的事件;类似于 HTML 中的 onevent 属性,例如 onClick。

这些 hx-on* 属性通过启用对任意 JavaScript 事件的处理而得到改进,即使在处理非标准 DOM 事件时也能增强行为局部性 (LoB) 。例如,这些属性允许你处理 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 的事件处理程序更容易一些,可以使用 htmx 事件的简写双冒号hx-on::,并省略“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>

hx-on(已弃用)

该值是一个事件名称,后跟冒号:,后跟脚本:

<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,有两个参数可供事件处理程序脚本使用:

  • thishx-on - 定义属性的元素
  • event - 触发处理程序的事件

笔记

  • hx-on 不会被继承,但是由于事件冒泡, hx-on 属性上的父元素通常会由子元素上的事件触发
  • hx-on: 和 hx-on 不能在同一个元素上同时使用;如果 hx-on: 存在,则 hx-on 同一元素上的属性值将被忽略。不过,这两种形式可以在同一文档中混合使用。