对于包装图像而不是文本的按钮, event.target.value 未定义

IT技术 javascript node.js reactjs
2021-05-15 10:12:35

我有两个相同的按钮,除了一个里面有一个图像,另一个里面有文本。我已经为两者添加了一个 onClick 事件处理程序。

图像按钮的 event.target.value 是未定义的,尽管有一个值并且文本按钮有正确的值。

以这个小提琴为例:https : //jsfiddle.net/69z2wepo/84885/

class MyComponent extends React.Component {
  constructor(props) {
    super(props);

    this.changeSlide = this.changeSlide.bind(this);
  }

  changeSlide(e) {
    e.preventDefault();
    console.log('e.target.value', e.target.value);
  }

  render() {
    return (
      <div>
      <button
        onClick={this.changeSlide}
        value="back">
        <img src="//www.gravatar.com/avatar/7150a453468d14f599772cd8330fcf25/?default=&s=80" alt="Previous slide" />
      </button>

        <button
          onClick={this.changeSlide}
          value="back">
          CLICK ME
        </button>
      </div>
    );
  }
}

ReactDOM.render(
  <MyComponent />,
  document.getElementById('container')
);

为什么会这样?在按钮内使用图像的正确方法是什么?

2个回答

您需要更改targetcurrentTarget

changeSlide(e) {
  e.preventDefault()
  console.log(e.currentTarget.value)
}

来自 DOM 事件文档:

Event.currentTarget 标识事件的当前目标,因为该事件遍历 DOM。它总是指事件处理程序已附加到的元素,而不是 event.target 标识发生事件的元素。

对于某些 DOM 元素,您应该使用textContent而不是value哪个更适用于输入元素

changeSlide(e) {
  e.preventDefault()
  console.log(e.currentTarget.textContent)
}

查看此 Stack Overflow 帖子了解更多信息。