【发布时间】:2020-07-11 01:24:09
【问题描述】:
在 JSX 中,可以像这样将多个事件绑定到一个 DOM 元素:
<input {...inputEvents}>
在 Svelte 中,这是手动完成的。
<input on:input={inputHandler}>
当您需要将多个处理程序(输入、模糊、焦点)添加到表单的多个输入时,这会变得乏味。
我发现在 Svelte 中解决此问题的唯一方法是使用 refs。
例如:
<input bind:this={myInput}>
然后在某个地方这样做:
myInput.oninput = (event) => {
// do something
}
或者:
myInput.addEventListener('click', (event) => {
// do something
})
有没有更好的方法在 Svelte 中动态绑定事件?
【问题讨论】:
-
不幸的是,没有 :( 我了解到 sveltejs 的动态性远低于预期...您的解决方案可能是最好的方法。
-
focusin和focusout冒泡,而focus和blur不会冒泡 (Focus Events)。您是否考虑过仅在表单元素上附加处理程序并使用Event.target 来路由处理,可能会将特定于元素的数据留在custom data attributes 中? -
一种解决方法,但您可以使用
use:操作。示例:svelte.dev/repl/6d70347b8b164ce9a0216ca859713655?version=3.20.1 -
嘿@PeerReynders,这是个好主意!
标签: javascript svelte