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

PrimeReact可编辑表格下拉框筛选输入框焦点丢失问题

修复PrimeReact Dropdown筛选框焦点丢失问题

问题根源

PrimeReact 9.x版本的Dropdown组件在启用筛选和虚拟滚动时,内部存在异步的焦点重置逻辑(比如虚拟滚动初始化完成后会自动将焦点切回主输入框),导致手动设置的筛选框焦点被覆盖。同时autoFocus属性会加剧焦点冲突。

解决方案

1. 移除autoFocus属性

首先去掉Dropdown上的autoFocus,避免主输入框初始抢占焦点。

2. 利用onShow事件+延迟聚焦

通过Dropdown的onShow事件(下拉面板打开时触发),配合短暂延迟确保面板和筛选框渲染完成后,再强制聚焦筛选框,并阻止主输入框后续窃取焦点。

完整代码示例

import { useRef } from 'react';
import { Dropdown } from 'primereact/dropdown';

// 组件内部代码
const dropdownRef = useRef(null);

const handleDropdownShow = () => {
    // 延迟100ms,等待PrimeReact内部逻辑执行完毕
    setTimeout(() => {
        if (!dropdownRef.current) return;
        
        // 获取筛选输入框
        const filterInput = dropdownRef.current.panel?.querySelector('.p-dropdown-filter');
        // 获取主输入框
        const mainInput = dropdownRef.current.input;

        if (filterInput) {
            filterInput.focus();
            
            // 临时阻止主输入框获取焦点,避免后续被内部逻辑覆盖
            if (mainInput) {
                const preventMainFocus = (e) => {
                    e.preventDefault();
                    filterInput.focus();
                    // 只阻止一次,避免影响后续操作
                    mainInput.removeEventListener('focus', preventMainFocus);
                };
                mainInput.addEventListener('focus', preventMainFocus);
            }
        }
    }, 100);
};

// Dropdown组件
<Dropdown
    ref={dropdownRef}
    id="requsitionerDropDown"
    virtualScrollerOptions={{ itemSize: 38 }}
    appendTo={'self'}
    value={options.value}
    filter
    style={{ width: '235%' }}
    options={requisitonerList}
    onChange={(e) => options.editorCallback(e.target.value)}
    optionLabel="value"
    optionValue="value"
    className="w-full md:w-14rem"
    onShow={handleDropdownShow}
/>

可选调整

  • 如果100ms延迟不够,可尝试调整为200ms,确保覆盖PrimeReact内部的异步焦点操作;
  • 若仍存在问题,可检查是否有全局的焦点管理逻辑(如无障碍插件、自定义焦点钩子)干扰。

内容的提问来源于stack exchange,提问作者Samet Dağ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:37:34