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

点击含图片的React按钮时控制台输出undefined,求原因分析

问题分析与解决

问题代码

import React, { Component } from "react";
import Person from "./Person.js";

class App extends Component {
  clickHandler = (event) => {
    event.preventDefault();
    const data = event.target.value;
    console.log(data);
  };
  url =
    "https://th.bing.com/th/id/OIP.eBSw-Azi3SfBlttoGOip1gHaEr?w=297&h=187&c=7&r=0&o=5&dpr=1.3&pid=1.7";
  render() {
    return (
      <div className="App">
        <div onClick={this.clickHandler}>Test1</div>
        <Person clickHandler={this.clickHandler}>Test2</Person>
        <button type="button" value="Dog" onClick={this.clickHandler}>
          <img src={this.url} alt="Funny Dog" />
        </button>
      </div>
    );
  }
}

export default App;

问题描述

为button元素定义了value属性值为"Dog",预期点击包含图片的按钮时控制台输出"Dog",但实际显示"undefined"。


原因

你使用的event.target指向的是实际被点击的DOM元素。当点击按钮里的图片时,event.target对应的是<img>标签,而这个标签本身没有value属性,所以会输出undefined。

而绑定点击事件的是<button>元素,你需要用event.currentTarget——它始终指向绑定了当前事件处理函数的元素,也就是那个带有value="Dog"的按钮。

解决方法

修改clickHandler里的取值逻辑即可:

clickHandler = (event) => {
  event.preventDefault();
  const data = event.currentTarget.value; // 将target替换为currentTarget
  console.log(data);
};

这样不管点击按钮内的图片还是按钮本身,currentTarget都会指向按钮元素,就能正确拿到"Dog"了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:05:58