为什么触摸事件在事件委托时target总是父元素?
在移动端用事件委托处理多个.item元素的touchstart事件,但发现e.target始终返回父元素div.box,而不是实际点击的子元素。我尝试过把事件绑定到父元素并用closest()方法筛选,但子元素上的点击完全没反应。
代码结构是这样的:
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
</div>
JS部分用了:
document.querySelector('.box').addEventListener('touchstart', function(e) {
const target = e.target.closest('.item');
if (target) console.log('clicked:', target.textContent);
});
但点击子元素时控制台没有任何输出,直接点击父容器才会触发。是不是触摸事件的事件冒泡机制和鼠标事件不一样?
试试直接用 e.target 判断,而不是 closest(),像这样:
如果还是不行,检查一下 CSS,确保 .item 元素不是被意外的层级遮挡了,或者尝试给 .box 和 .item 加上 pointer-events: auto; 看看有没有效果。