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

无法获取react-bootstrap组件点击事件target的value值

问题原因
  • 事件冒泡导致event.target指向不稳定:点击条目时,实际触发事件的目标可能是内部的<Col>、<strong>等子元素,这些元素未绑定对应value,所以返回undefined,只有点击到ListGroup.Item本身区域时才能拿到预期值。
  • react-bootstrap 4.6的ListGroup.Item组件的value属性并非用于存储自定义业务数据,属于非标准属性,不会稳定挂载到生成的DOM节点上,取值可靠性低。
解决方案

方案1(优先推荐):直接传递ID参数

绑定点击事件时直接把对应产品ID作为参数传入处理函数,完全绕过事件对象取值的不稳定问题:

// 列表项绑定部分修改
<ListGroup.Item 
  action 
  onClick={() => select(eachProduct._id)} 
  className="product-item" 
  key={eachProduct._id}
>
        <Row>
            <Col>
                {eachProduct.name}
            </Col>
            <Col className="text-right">
                {eachProduct.isActive ?
                    <strong className="text-success">Active</strong>:
                    <strong className="text-danger">Inactive</strong>}
            </Col>
        </Row>
</ListGroup.Item> 

// 处理函数修改
const select = (productId) => {
   console.log(productId) // 稳定返回对应产品ID
}

方案2:使用currentTarget配合标准自定义属性

如果需要保留事件对象使用,使用event.currentTarget(永远指向事件绑定的元素本身)代替event.target,同时用HTML标准的data-*属性存储自定义值:

// 列表项绑定部分修改
<ListGroup.Item 
  action 
  onClick={select} 
  className="product-item" 
  key={eachProduct._id}
  data-product-id={eachProduct._id}
>
<!-- 内部内容不变 -->
</ListGroup.Item> 

// 处理函数修改
const select = (event) => {
   console.log(event.currentTarget.dataset.productId) // 稳定返回对应产品ID
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:01