Я пытаюсь создать компонент ввода в 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
у меня не сработает, поскольку я сравниваю предыдущее и обновленное значение.
Связанный