首页新闻找找看学习计划

点击事件捕获不到子元素

0
悬赏园豆:10 [待解决问题]

请问angular中,绑定ng-click点击事件,触发时查看e.target发现只能指向下一级子元素,不能指向最底层的子元素是什么原因?如下代码中,则表示为,点击图片触发".subject_box"元素的点击事件,$(e.target)为“.viewport”,而不是“img”
代码如下:

<div class="subject_box" ng-controller="srCtrl" ng-click="titleclick(data,$event)">
<div class="viewport">
<ul class="bxslider">
<li style="height:100%; overflow: hidden;" ng-repeat="data in srDatas">
<img ng-src="{{'proxy/iframefile/qybdirprocess/download/'+ data.IMG_URL}}">
</li>
</ul>
</div>
<div class="loading" ng-if="loading"><img src="img/loading-img.gif"></div>
</div>

乙一flow的主页 乙一flow | 初学一级 | 园豆:153
提问于:2019-06-20 10:01
< >
分享
所有回答(2)
0

看一下事件有没有触发<------事件方法里alert("dddddd");看能不能弹出来

学会乐观 | 园豆:655 (小虾三级) | 2019-06-20 13:03

谢谢,事件肯定是被触发了的,不然也不能获取到$(e.target)。问题在于最底层子元素没有被捕获到。问题已解决,可能与谷歌新特性有关,在别的浏览器例如火狐、360都是可以获取到的。

支持(0) 反对(0) 乙一flow | 园豆:153 (初学一级) | 2019-06-20 15:08
0

在用到的插件中,将jquery的bind都改成原生js的事件监听,并配置passive:true。

原因【引用】: Chrome51 版本以后,Chrome 增加了新的事件捕获机制-Passive Event Listeners;
Passive Event Listeners:就是告诉前页面内的事件监听器内部是否会调用preventDefault函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。当属性passive的值为true的时候,代表该监听器内部不会调用preventDefault函数来阻止默认滑动行为,Chrome浏览器称这类型的监听器为被动(passive)监听器。目前Chrome主要利用该特性来优化页面的滑动性能,所以Passive Event Listeners特性当前仅支持mousewheel/touch相关事件。

作者:小丶侯
链接:https://www.jianshu.com/p/5bae6433025f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

乙一flow | 园豆:153 (初学一级) | 2019-06-20 15:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册