【发布时间】:2021-07-31 09:21:15
【问题描述】:
我正在尝试在 Svelte 中创建一个输入组件,其中值由 JavaScript 函数更新。但是,如果新值与旧值相同,Svelte 将不会更新输入元素。
例如,此组件应将输入限制为仅数字。如果您输入“123abc”,则输入将显示“123abc”,而value 变量只是“123”。
<script>
let value = ''
const handleInput = (event) => {
value = event.currentTarget.value.replace(/[^\d]/gu, '')
}
</script>
<input {value} type='text' on:input={handleInput} />
<p>
Value: "{value}"
</p>
有没有办法让输入值总是等于value 变量?
尝试的解决方案
- 使用 HTML
pattern属性。虽然它适用于本示例,但不适用于我试图解决的一般情况 - 只能说
event.currentTarget.value = value。这很有效,但看起来不像 Svelte。 -
bind:value与事件侦听器有相同的问题(例如,$: value = value.replace(/[^\d]/gu, ''))。此外,在一般情况下,bind:value对我不起作用,因为我正在比较以前的值和更新后的值。
相关
【问题讨论】: