【发布时间】:2021-07-15 19:14:51
【问题描述】:
我想在焦点上选择input 元素的文本。我尝试使用bind:this={ref},然后使用ref.select(),但这似乎只有在我从input 元素中删除bind:value 时才有效。为什么?以及如何解决?
非常感谢!
<script lang="ts">
import { evaluate } from 'mathjs';
export let value: string | number = 0;
let ref;
function handleFocus() {
value = value?.toString().replace('.', '').replace(',', '.');
ref.select();
}
function handleBlur() {
value = parseFloat(evaluate(value?.toString())).toLocaleString('be-NL', {
maximumFractionDigits: 2,
minimumFractionDigits: 2
});
}
</script>
<input
class="text-right"
autocomplete="off"
type="text"
bind:value
bind:this={ref}
on:focus={handleFocus}
on:blur={handleBlur}
/>
【问题讨论】:
-
我认为这是因为您在尝试选择文本之前更改了绑定到的值。如果您删除它应该选择的
value = value?.toString().replace('.', '').replace(',', '.');部分。或者,您可以使用setTimeout(()=> ref.select(), 0)或使用await tick()并使您的函数异步,即使在select()之前进行更改,它也应该可以正常工作。 -
await tick()完美运行!谢谢
标签: typescript svelte