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

MUI Material Autocomplete组件onBlur失效问题求助

Material UI Autocomplete onBlur不生效的原因及解决方案

问题原因

  • Autocomplete组件内部包含输入框、下拉菜单等多个可聚焦元素,焦点会在组件内部元素间转移,不会触发外层组件的onBlur。
  • 组件自带的onBlur仅在**整个组件完全失去焦点(如点击页面空白区且下拉菜单已关闭)**时才会触发,触发场景非常有限,这就是你只看到onFocus生效的原因。

解决方案

根据你的需求选择对应方案:

方案1:检测输入框失去焦点

直接将onBlur绑定到内部的TextField组件上,只要输入框失去焦点就会触发:

<Autocomplete
  onFocus={() => {
    console.log("true");
  }}
  multiple
  id="combo-box-demo"
  options={props.category}
  style={{ margin: '10px', width: '300px' }}
  size='small'
  value={assign}
  getOptionLabel={(option) => option.category}
  onChange={(event, newValue) => setAssign(newValue)}
  filterSelectedOptions
  renderInput={(params) => (
    <TextField
      {...params}
      label="Category"
      placeholder="Select Category"
      size='small'
      // 绑定输入框的onBlur
      onBlur={() => {
        console.log("false");
      }}
    />
  )}
/>

方案2:检测组件完全失去交互(下拉菜单关闭+输入框失焦)

使用Autocomplete的onClose事件配合焦点检测,确保组件完全脱离用户交互时触发:

import { useState } from 'react';

// ...

const [isOpen, setIsOpen] = useState(false);

<Autocomplete
  onFocus={() => {
    console.log("true");
    setIsOpen(true);
  }}
  onClose={() => {
    // 延迟检测确保焦点已离开组件
    setTimeout(() => {
      const activeElement = document.activeElement;
      if (!activeElement?.closest('#combo-box-demo')) {
        console.log("false");
        setIsOpen(false);
      }
    }, 100);
  }}
  open={isOpen}
  onOpen={() => setIsOpen(true)}
  multiple
  id="combo-box-demo"
  options={props.category}
  style={{ margin: '10px', width: '300px' }}
  size='small'
  value={assign}
  getOptionLabel={(option) => option.category}
  onChange={(event, newValue) => setAssign(newValue)}
  filterSelectedOptions
  renderInput={(params) => (
    <TextField
      {...params}
      label="Category"
      placeholder="Select Category"
      size='small'
    />
  )}
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:10:32