活动

HTML 允许您使用 on* 属性设置内联事件侦听器。这几乎就是在 Markup 中的标签上设置事件侦听器的方式。

javascript
const handleClick = (event) => {
    console.log(event)
}

html`<button onclick="${handleClick}">click me</button>`

与 Markup 的最大区别在于,这些属性不会渲染,并且在幕后 Markup 使用 addEventListener 在标签上设置事件侦听器。

javascript
html`<button onclick="${handleClick}">click me</button>`.render(document.body)

// renders: <button>click me</button>

这允许您的 HTML 拥有事件侦听器,并且通过不允许不安全的内联事件侦听器属性来确保安全,同时仍然享受使用 addEventListener API 的所有优势。

活动选项

由于 Markup 在后台使用 addEventListener,因此它提供了一种特殊的语法,允许您设置本机 HTML 无法设置的选项。

javascript
const handleClick = (event) => {
    console.log(event)
}

html`<button onclick="${[handleClick, { once: true }]}">
    click me
</button>`.render(document.body)

通过提供元组(具有两个值的数组),您可以指定设置事件侦听器时要使用的处理程序及其选项。

这些选项只是 addEventListener 选项,允许您指定如何处理事件,包括定义信号。

javascript
const controller = new AbortController()
const signal = controller.signal

const handleClick = (event) => {
    controller.abort()
    console.log('clicked')
}

html`<button onclick="${[handleClick, { signal }]}">click me</button>`.render(
    document.body
)
编辑本文档