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

如何为Headless UI(Tailwind)的Listbox选择器设置自动聚焦默认打开

解决方法

你使用的autoFocus属性作用仅为让按钮获得输入焦点,和下拉框是否展开没有关联,自然无法实现默认展开的效果。Headless UI的Listbox支持受控模式,你只要手动接管它的展开状态即可:

  1. 先声明状态用来控制下拉框显隐,初始值设为true
  2. 给Listbox组件绑定open和onOpenChange属性关联你声明的状态

示例代码如下:

import { useState } from 'react'
import { Listbox } from '@headlessui/react'

// 你的组件逻辑
const YourComponent = () => {
  const [selectedPerson, setSelectedPerson] = useState(people[0])
  // 新增控制下拉展开的状态,初始为true即默认展开
  const [isListboxOpen, setIsListboxOpen] = useState(true)

  return (
    <Listbox 
      value={selectedPerson} 
      onChange={setSelectedPerson}
      // 绑定控制状态
      open={isListboxOpen}
      onOpenChange={setIsListboxOpen}
    >
      <Listbox.Button>{selectedPerson.name}</Listbox.Button>
      <Listbox.Options>
        {people.map((person) => (
          <Listbox.Option
            key={person.id}
            value={person}
            disabled={person.unavailable}
          >
            {person.name}
          </Listbox.Option>
        ))}
      </Listbox.Options>
    </Listbox>
  )
}

如果需要在默认展开的同时让第一个可选项获得焦点,可以给对应Listbox.Option加上autoFocus属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:04