js 事件委托只能委托到直接父级上吗?
比如有如下三级结构
<div class='box'>
<div class='a'>
<div class='b'>
</div>
</div>
</div>
<script>
var box=document.querySelector(.box);
box.addEventListener("click",clk);
function clk(e){
//想获得a结构
var isA=e.target.class.contains("a");
console.log(e.target)//实际总是b
}
</script>
实际上输出的目标总是b,这是为什么?有什么办法获取a?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在正常文档流中,如果A和B是“重合”的(A的宽高是B撑开的;或者A指定了宽高,B的宽高设置了100%)
那么你点击的时候获取到的e.target会是B。
这个跟浏览器DOM结构相关。
要获取到A:
试试把第三个参数改成
true
https://developer.mozilla.org...
不知道你的样式单是怎么写的,就是那三个class,最大的可能是,由于外层的div包含了内层的div,你所有的点击动作都是作用在最内层的div上。所有,event.target始终指向b
参考:
target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。
http://www.cnblogs.com/wkylin...
你的b遮住了a,b在顶部压着a,你可以在a 和b 里都包一些字母,然后让鼠标点击a。
(你给,a和b添加背景色,就知道谁压着谁了。)
把事件绑定到a上,然后在捕获阶段触发,能不能解决?