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

MUI中启用select属性时如何获取TextField的ID?

解决MUI TextField(select模式) onChange事件中e.target.id为undefined的问题

问题原因

当MUI的TextField启用select属性时,onChange事件的触发源可能是内部的<MenuItem>而非绑定事件的TextField容器,导致e.target指向的元素没有继承设置的id属性,从而拿到undefined。

解决方案

方案1:使用e.currentTarget替代e.target

currentTarget始终指向绑定事件的元素(即TextField对应的原生组件),能正确获取到设置的id:

const handleIdCode = useCallback((e) => {
    const { name, value, id } = e.currentTarget
    console.log(name, value, id, 'test')
})

方案2:在自定义组件中手动传递id

既然自定义组件已经接收了id参数,可以在调用回调时直接把id传过去,避免依赖事件对象:

  1. 修改自定义组件的onChange逻辑:
export default ({
    onChangeSelect,
    input,
    label,
    options,
    name,
    required,
    placeholder,
    id
}) => {
    return <TextField
        value={input}
        onChange={(e) => onChangeSelect(e, id)} // 手动传递id
        select
        id={id}
        placeholder={placeholder}
        label={label}
        name={name}
        required={required}
        InputLabelProps={{ shrink: (placeholder || input), style: { fontSize: 16 } }}
    >
        {options.map(data => <MenuItem key={data.name} value={data.value}>{data.name}</MenuItem>)}
    </TextField>
}
  1. 调整回调函数接收id参数:
const handleIdCode = useCallback((e, id) => {
    const { name, value } = e.target
    console.log(name, value, id, 'test')
})

方案3:确认id属性已正确传入自定义组件

检查使用该自定义组件的代码,确保传入了有效的id值,而非undefined:

<CustomTextField 
    id="my-select-id" // 必须传入有效的id值
    onChangeSelect={handleIdCode}
    // 其他属性...
/>

内容的提问来源于stack exchange,提问作者KARTHIKEYAN.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:43:10