如何检查我的event.target是否为React中的HTML输入元素的typeof?

时间:2019-06-11 03:47:32

标签: javascript reactjs

请参见此最低示例https://codepen.io/rockmandash/pen/Rzwowd

代码是这样的:

enter image description here

<div class="cool">
  <input type="checkbox" value="checkbox1">
  <input type="checkbox" value="checkbox2">
  <input type="checkbox" value="checkbox3">
</div>
document.querySelector(".cool").addEventListener("click", event => {
  // In React World
  // How do I check if event.target is typeof HTML.input Element?
  console.log(event.target.value);
});

我问这个问题是因为我有成千上万个输入元素,作为回应,我将不得不创建成千上万个回调函数。

因此,我将函数上移到其父级,但是然后我必须验证当前是否单击输入元素。

否则,我可能会设置错误的event.target.value。

3 个答案:

答案 0 :(得分:2)

g(1)

答案 1 :(得分:2)

使用事件类型

handleCheck = (event) => {
  // In React World
  console.log(event.target.type);
}

<div class="cool">
  <input onClick={this.handleCheck} type="checkbox" value="checkbox1" />
  <input onClick={this.handleCheck} type="checkbox" value="checkbox2" />
  <input onClick={this.handleCheck} type="checkbox" value="checkbox3" />
</div>

演示

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.0/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.21.1/babel.min.js"></script>
<div id="root"></div>

<script type="text/babel">

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      name: 'React'
    };
  }

  handleCheck = (event) => {
    console.log(event.target.type);
  }

  render() {
    return (
      <div>
      <div class="cool">
        <input onClick={this.handleCheck} type="checkbox" value="checkbox1" />
        <input onClick={this.handleCheck} type="checkbox" value="checkbox2" />
        <input onClick={this.handleCheck} type="checkbox" value="checkbox3" />
        
        <input onChange={this.handleCheck} type="text" />
      </div>
      </div>
    );
  }
}

ReactDOM.render(
    <App />,
    document.getElementById('root')
);
</script>

答案 2 :(得分:0)

这是事件委托的一个很好的例子。参见How JavaScript Event Delegation Works

要检查单击的元素的类型,请使用tagNamenodeName

if (event.target.nodeName === "A")

请注意,您需要使用大写字母:DIVLIA,...

注意:在您的特定情况下,您可以像这样检查input元素的类型:event.target.type === "submit"。但是像divlia之类的元素没有type属性,因此event.target.type的值对所有元素都是undefined