【发布时间】:2021-03-06 13:50:16
【问题描述】:
我有一个多行表。每行都有一个调用类handleClick 方法的onClick 属性。每个都有多个子元素。没有一个子元素具有 onClick 属性,因此它们不应触发 handleClick 方法。
代码如下:
...
export class EventRow extends Component {
...
handleClick = (e) => {
e.preventDefault();
console.log(e.target.id);
console.log(e.target.nodeName);
}
...
render () {
return (
<tr id = { "tr" + this.props.eventdefinition.event_id } className = "noselect" onClick = { this.handleClick.bind(this) }>
<td className = "noselect">{this.props.eventdefinition.event_name}</td>
<td>
<div className = "custom-control custom-checkbox tdDiv noselect">
<input type="checkbox" className = "custom-control-input" id = { "customCheck" + this.props.eventdefinition.event_id } readOnly checked = {this.props.eventdefinition.recurring} />
<label className = "custom-control-label" htmlFor = {"customCheck" + this.props.eventdefinition.event_id}></label>
</div>
</td>
<td>
<div className = "custom-control custom-switch tdDiv noselect">
<input type="checkbox" className = "custom-control-input" id = { "customSwitch" + this.props.eventdefinition.event_id } checked = {this.props.eventdefinition.active_for_generation} onChange = { this.onChange }/>
<label className = "custom-control-label" htmlFor = {"customSwitch" + this.props.eventdefinition.event_id}></label>
</div>
</td>
</tr>
);
}
}
...
现在你可以看到在handleClick方法中有两条console.log语句。当我点击我的行时,我希望在我的控制台中我会得到一个 id,例如tr3 和一个节点名称TR,但是我得到的任何孩子的 id 也被点击,通常是黑色的 @987654325 @,以及任何子节点的名称也被点击了TD 或INPUT 或LABEL。我的事件触发器发生了什么?
【问题讨论】:
-
我应该注意,有一个非常简单的解决方案可以解决我的问题,即使用单击的任何子元素来确定单击了哪一行,但这更像是一种 hack,并不能解决我的问题对孩子触发 onClick 的原因感到困惑。
标签: javascript reactjs onclick