vue3中使用 input输入框,想在focus事件里如果当前为空,赋默认值为1,且选中框内文本,输入其他数字直接替换,选中e.target.select()为啥不起作用呢?

vue3中使用 input输入框,想在focus事件里如果当前为空,赋默认值为1,且选中框内文本,输入其他数字直接替换,选中e.target.select()为啥不起作用呢?
image.png
如上图,文本框,想在input focus事件时,如果当前为空,赋值为1,且光标选中,输入其他数字可直接替换。

代码如下:
image.png
focus处理函数如下:
image.png
想实现的效果如下图:如果focus时,文本输入为空,赋值为1,且光标选中文本状态,输入其他数字可直接替换
image.png
求解。

阅读 2.7k
2 个回答

nextTick

传送门:Vue3 Playground - http://2t8.cn/LknDl

function onFocus(e) {
  if (!msg.value) {
    msg.value = "1";
  }
  nextTick(() => e.target.select());
}

还可以直接把两个行为分开

function onFocus(e) {
  if (!msg.value) {
    msg.value = "1";
    nextTick(() => e.target.select());
  } else {
    e.target.select();
  }
}

因为你改了值后界面还没渲染你就选中了,建议加个延迟

state.xxx.xxx = '1'
nextTick(() => {
    e.target.select()
})

要是还是不生效就再套一层 nextTick 或者 setTimeout

推荐问题
logo
Microsoft
子站问答
访问
宣传栏