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
子站问答
访问
宣传栏