亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么子元素屬性會傳遞到父 <tr> 元素的 onClick 事件(React)中?

為什么子元素屬性會傳遞到父 <tr> 元素的 onClick 事件(React)中?

哆啦的時光機 2023-08-24 18:02:01
我有一個有多行的表。每行都有一個 onClick 屬性,該屬性調用類的 handleClick 方法。每個都有多個子元素。所有子元素都沒有 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(通常是黑色) ,以及任何子項的節點名稱也被點擊TD或INPUT或LABEL。我的事件觸發器發生了什么?
查看完整描述

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

JavaScript 中的事件冒泡和事件傳播稱為事件冒泡。請檢查一下。所以發生的事情是,事件被傳遞給父母,像這樣:

https://img4.sycdn.imooc.com/64e72ac000018e1305250151.jpg

冒泡會影響直到父級(即 body)的所有元素。這里有事件目標,它將包含觸發該事件的元素。在您的情況下,它可能是單擊的TDINPUTLABEL

停止冒泡

您可以根據場景使用以下任一方法來停止從觸發元素到上述父元素或子元素的事件傳播:

event.stopPropagation();
event.stopImmediatePropagation();
查看完整回答
反對 回復 2023-08-24
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

您可以通過調用來防止這種情況event.stopPropagation();,發生這種情況是因為單擊事件通過 DOM 樹傳播,觸發父元素的單擊事件。



查看完整回答
反對 回復 2023-08-24
  • 2 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號