javascript - 如何作为 e.target 获取指定 onClick 的确切元素?

标签 javascript reactjs events dom-events children

我有一个 React 组件并给它 onClick 事件处理程序:

function Item(props) {
  return <li onClick={props.onClick}>{props.children}</li>
}

然后我像这样使用组件:

<Item onClick={ function(e) {console.log(e.target)} }>
  <span>This element is returned as e.target if clicked on it!</span>
</Item>

当我点击文本时,span 元素被记录为目标,当它在给定范围之外被点击时,li 元素被记录为目标。

问题是:
如果 li 元素中有很多子元素,并且必须获取 id 或 name,这将成为一个“hacky”任务...

问题是:
是否有可能进入处理程序函数,如 e.target 指定 onClick 的确切元素(不是子元素;在本例中为 li)?

附言。如果可能,不要使用 jQuery 作为解决方案。

最佳答案

event.target 将始终为您提供调度事件的元素。为了获取当前处理的监听器元素,您必须使用 event.currentTarget

这应该有所帮助:https://developer.mozilla.org/en-US/docs/Web/API/Event/Comparison_of_Event_Targets

这里有一个简单的例子来说明你的问题:

const Inner = () => <div className="inner">Inner</div>

const Outer = () => {
  const clickHandler = e => {
    console.log('target:', e.target.getAttribute('class'));
    console.log('currentTarget:', e.currentTarget.getAttribute('class'));
  };

  return (<div className="outer" onClick={clickHandler}><Inner /></div>);
};

ReactDOM.render(<Outer/>, document.getElementById('app'));
.outer {
  background: rosybrown;
  padding: 40px;
}

.inner {
  background: cornsilk;
  padding: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="app"></div>

关于javascript - 如何作为 e.target 获取指定 onClick 的确切元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43089848/

相关文章:

javascript - this 的值是由函数调用的词法性质决定的吗?

javascript - 谷歌地图 API : Setting up callbacks for adding markers/polyline

javascript - 如何监听 "ref"对象变化?

javascript - react : TypeError: Cannot read property 'productID' of undefined

javascript - 如何将回调方法发送到另一个回调方法

javascript - 每 1 分钟返回一次 promise ?

javascript - Prop 在组件中被标记为 required,但其值为 `undefined`

javascript - Firefox 3.6 没有右键单击事件

JavaScript - addEventListener "click"不起作用

vba - 使用无模式表单和用户定义的类处理自定义事件