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

Chakra UI中Select组件选项弹窗打开后立即关闭问题求助

Chakra UI Menu内嵌套Select时下拉弹窗立即关闭的问题解决

问题成因

Chakra UI的Menu组件默认逻辑是:点击MenuList内部的可点击元素(比如MenuItem)时,会触发外层菜单的关闭。当你在MenuItem里嵌套Select组件时,点击Select的操作会触发事件冒泡,被Menu的关闭监听器捕获,导致MenuList直接关闭,Select的下拉弹窗自然也跟着消失了。

解决方案

方法1:阻止事件冒泡

给包裹Select的MenuItem添加点击事件,阻止事件向上冒泡,这样Menu就不会因为点击Select而触发关闭:

<MenuItem
  p="0"
  _hover={{
    backgroundColor: theme.colors.whiteAlpha[300],
  }}
  onClick={(e) => e.stopPropagation()}
>
  {/* 原有内部Flex、Box、Select代码保持不变 */}
</MenuItem>

方法2:将Select移出MenuItem(业务允许的话)

如果Select所在区域不需要具备MenuItem的点击交互,可以直接把Select放在MenuList里,不再嵌套到MenuItem中,这样就不会触发MenuItem的关闭逻辑:

<MenuList
  bg="#17243a"
  border="none"
  height="265px"
>
  <Flex position="absolute" w="100%" p="0.25rem">
    <Box
      w="27.6px"
      bgColor="black"
      borderLeftRadius="md"
      alignItems="center"
      justifyContent="center"
      display="flex"
    >
      <Text color="#f5bd42">{1}</Text>
    </Box>
    <Box w="calc(100% - 27.6px)" borderRightRadius="md" bgColor="#f5bd42" display="flex" alignItems="center">
      <Select size="xs">
        {plans?.Data?.slice(0, 8).map((plan, index) => (
          <option key={index}>{plan.Name}</option>
        ))}
      </Select>
    </Box>
  </Flex>
</MenuList>

方法3:关闭Menu的自动关闭逻辑(按需使用)

给Menu组件设置closeOnSelect={false},这样点击MenuItem时不会自动关闭Menu,但要注意这个设置会作用于所有MenuItem,如果需要其他MenuItem点击时关闭,得手动处理关闭逻辑:

<Menu closeOnSelect={false}>
  {/* 原有MenuButton和MenuList代码保持不变 */}
</Menu>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:35:13