You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中通过ref获取元素设置焦点失败,$refs值为空求助

Vue 2 中点击按钮让输入框获取焦点的问题解决方法

你的问题核心是对Vue 2中ref的使用逻辑理解有误:

  • 对于原生HTML元素(比如你的<input>),this.$refs.inp2直接指向DOM元素本身,不需要额外访问$el属性;只有当ref绑定在Vue自定义组件上时,才需要通过$el获取组件对应的根DOM元素。

另外你看到$refs里的值是空对象,是JSON.stringify无法正确序列化DOM元素导致的假象——DOM元素包含循环引用,JSON无法解析,所以会显示为空对象,但实际上this.$refs.inp2是有效的DOM元素,可以直接调用它的方法。

修正后的代码

JavaScript部分

Vue.config.productionTip = false;
Vue.config.devtools = false;

var app = new Vue({
  el: '#app',
  data: {
    message: 'World'
  },
  methods: {
    click() {
      // 直接调用DOM元素的focus方法即可
      this.$refs.inp2.focus();
    }
  }
})

HTML部分(无需改动)

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <h1>Why are refs empty objects?</h1>
  <input ref="inp1"></input><br/><br/>
  <input ref="inp2" placeholder="i want focus on click"></input><br/><br/>
  <button @click="click">Click me</button>
</div>

内容的提问来源于stack exchange,提问作者goodson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:12:29