Vue 通过 refs 将焦点放在输入上

Posted

技术标签:

【中文标题】Vue 通过 refs 将焦点放在输入上【英文标题】:Vue put focus on an input via refs 【发布时间】:2021-12-19 10:20:00 【问题描述】:

我使用 v-for 为列表中的每个项目创建输入,我通过以下方式分配 ref

:ref="`input-$index`"

这让我的 $refs 看起来像这样

现在我的问题是;在添加输入时,我还想将重点放在最后一个输入上,但是我无法使其工作。

现在我尝试了这样的事情,

this.$refs["input-" + index.toString()].focus()

但是我觉得这与我不知道如何处理的 refs 的结构有关。

有谁知道我如何访问每个输入以及如何聚焦它(我猜只是 .focus())。

【问题讨论】:

【参考方案1】:

您似乎在 v-for 循环中使用 ref,在这种情况下,建议在包含 v-for 指令的根元素中使用 ref,如下所示:

 <input v-for="(item, index) in items" ref="inputs" .../>

这将创建一个引用元素的数组,您可以像这样使用它们:

 this.$refs.inputs[someIndex].focus()

 this.$refs.inputs[this.$refs.inputs.length-1].focus() // focus on the last input

【讨论】:

嘿@Boussadjra @Amaarrockz 你好,我的朋友 我试过这个,我仍然得到“TypeError:无法读取未定义的属性(读取'焦点')”。我不知道这很重要,但是除了输入之外,我在 v-for 中还有更多内容 你在哪里调用那个焦点函数以及你如何定义参考 我将 ref="inputs" 放在带有 v-for 的元素上,并像这样调用焦点:this.$refs.inputs[this.inputs.length - 1].focus()。我在将一个空字符串推送到输入数组后调用它,这会产生一个新的输入元素。对我来说,这似乎正是你的意思。然而,我认为可能是一个问题,带有 v-for 的元素包含多个元素(离子标签、离子输入和离子图标)【参考方案2】:

所以我不再确切知道了,但我记得问题在于我将重点放在离子项目而不是离子输入上。我需要添加 .children[i] (我取决于它是什么孩子)。这让我可以把重点放在输入上:)

【讨论】:

以上是关于Vue 通过 refs 将焦点放在输入上的主要内容,如果未能解决你的问题,请参考以下文章

vue中控制input获取焦点

是否可以将焦点应用于我的 React 组件之一内的输入元素,而无需直接将 ref 分配给输入标签?

NativeScript Vue - 将焦点放在 TextField 上

Vue 通过ref获取DOM元素

Vue 通过ref获取DOM元素

Vue中输入框自动获取焦点-移动端ios不能唤起键盘解决办法