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

如何让v-autocomplete/v-select在v-menu激活时默认聚焦以正常显示下拉列表

解决方案

方案1:通过v-menu的opened事件触发聚焦(最稳妥)

Vuetify的v-menu提供opened事件,会在菜单完全渲染展开后触发,此时调用v-autocomplete暴露的focus()实例方法即可实现默认聚焦:

<template>
  <v-menu
    v-model="menuOpen"
    :close-on-content-click="false"
    offset-y
    @opened="handleMenuOpened"
  >
    <template v-slot:activator="{ on, attrs }">
      <v-btn v-bind="attrs" v-on="on">
        打开选择器
      </v-btn>
    </template>
    <v-autocomplete
      ref="autocompleteRef"
      :items="options"
      label="选择项"
      <!-- 其他自定义属性 -->
    />
  </v-menu>
</template>

<script>
// Vue2 写法
export default {
  data() {
    return {
      menuOpen: false,
      options: ['选项1', '选项2', '选项3']
    }
  },
  methods: {
    handleMenuOpened() {
      this.$nextTick(() => {
        this.$refs.autocompleteRef.focus()
      })
    }
  }
}

// Vue3 写法
/*
<script setup>
import { ref, nextTick } from 'vue'
const menuOpen = ref(false)
const autocompleteRef = ref(null)
const options = ['选项1', '选项2', '选项3']

const handleMenuOpened = async () => {
  await nextTick()
  autocompleteRef.value.focus()
}
</script>
*/
</script>

注意不要用v-menu的open事件,该事件在菜单刚触发打开时就会执行,此时v-autocomplete还未完成DOM渲染,调用focus会失效。

补充说明

你遇到的下拉被挤压的问题,本质是v-select系列组件的下拉宽度默认和输入框宽度同步,输入框未聚焦时组件未完成完整的布局宽度计算,导致下拉容器宽度异常。聚焦后组件会重新计算布局,下拉宽度就能恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:09:04