在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ Table上進行事件代理(委托)時,為什么捕獲不到TR

Table上進行事件代理(委托)時,為什么捕獲不到TR

在table上綁定了一個mouseover事件,目的是打算移動到哪一行就拿到哪一行的數(shù)據(jù).但是發(fā)現(xiàn)不管是把事件設置在捕獲階段還是冒泡階段,只能拿到td拿不到tr這是怎么回事大佬求幫助

TABLE.addEventListener('mouseover', (e)=>{
  console.log(e.target.tagName);
  
  if(e.target.tagName === 'TR') {
    console.log(e.target);
    //始終不會執(zhí)行
  }
},false)
回答
編輯回答
真難過

tr標簽被td完全遮蓋住,所以mouseover根本不會降臨到tr上,都是在td上直接觸發(fā)。
實驗中會發(fā)現(xiàn)先觸發(fā)是table,因為table默認有邊框或單元格空隙,鼠標從外部進入table晃過時先經過table的邊框或單元格空隙, 可以通過把table的border和cellspacing設置為0驗證,table將不會被mouseover。

2017年4月14日 06:19
編輯回答
爆扎

事件冒泡并不是所有節(jié)點都觸發(fā)一次,而是從最下層的節(jié)點,逐級向上傳遞。所以你這樣是無法捕捉到 <tr> 觸發(fā)的事件的,因為它不是最下層,它下面還有 <td>。

我不知道你要干嘛,我想象不到為啥要只捕獲 <tr>。

2017年5月10日 00:13
編輯回答
尐潴豬

我的意思是你在 table 上 addEventListener e.target 是 table e.currentTarget 是 td,你根本拿不到 tr 。除非你在 tr 上 addEventListener,這時候 e.target 才是 tr。

2018年8月12日 19:12