为何表格行点击事件的event.target是单元格而非行?
为什么点击表格行时事件target是单元格而非行?
这不是操作错误,是DOM事件的事件冒泡机制导致的:
event.target代表的是实际被点击的最内层DOM元素,你点击的是单元格<td>,所以它自然就是target,哪怕事件监听器是绑在父元素<tr>上的。- 而
event.currentTarget才是绑定了事件监听器的元素,也就是你真正关注的<tr>,直接用它就能获取data-index,不用去取parentElement。
修改你的handler函数就能解决问题:
function handler ( event ) { console.log( event.target.innerText ); // 依然能拿到点击的单元格内容 console.log( event.currentTarget.getAttribute( "data-index" ) ); // 直接获取行的data-index }
再补充下事件冒泡的逻辑:当你点击单元格时,事件会从<td>开始向上逐层冒泡(依次经过<tr>、<table>、<body>等),绑定在<tr>上的监听器会在事件冒泡到<tr>时触发,但target始终指向最初被点击的那个元素,也就是<td>。
内容的提问来源于stack exchange,提问作者LiamF
相关产品推荐
相关产品推荐

