哆啦的時(shí)光機(jī)
2023-08-24 18:02:01
我有一個(gè)有多行的表。每行都有一個(gè) onClick 屬性,該屬性調(diào)用類的 handleClick 方法。每個(gè)都有多個(gè)子元素。所有子元素都沒(méi)有 onClick 屬性,因此它們不應(yīng)觸發(fā) 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> ); }}...現(xiàn)在您可以看到在handleClick 方法中,有兩個(gè)console.log 語(yǔ)句。當(dāng)我點(diǎn)擊我的行時(shí),我希望在我的控制臺(tái)中我會(huì)得到一個(gè) id 和tr3一個(gè)節(jié)點(diǎn)名稱TR,但是我得到的是也被點(diǎn)擊的任何子項(xiàng)的 id(通常是黑色) ,以及任何子項(xiàng)的節(jié)點(diǎn)名稱也被點(diǎn)擊TD或INPUT或LABEL。我的事件觸發(fā)器發(fā)生了什么?
2 回答
慕森卡
TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
JavaScript 中的事件冒泡和事件傳播稱為事件冒泡。請(qǐng)檢查一下。所以發(fā)生的事情是,事件被傳遞給父母,像這樣:

冒泡會(huì)影響直到父級(jí)(即 body)的所有元素。這里有事件目標(biāo),它將包含觸發(fā)該事件的元素。在您的情況下,它可能是單擊的TD或INPUT或LABEL。
停止冒泡
您可以根據(jù)場(chǎng)景使用以下任一方法來(lái)停止從觸發(fā)元素到上述父元素或子元素的事件傳播:
event.stopPropagation(); event.stopImmediatePropagation();
ABOUTYOU
TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以通過(guò)調(diào)用來(lái)防止這種情況event.stopPropagation();,發(fā)生這種情況是因?yàn)閱螕羰录ㄟ^(guò) DOM 樹(shù)傳播,觸發(fā)父元素的單擊事件。
添加回答
舉報(bào)
0/150
提交
取消
