[ 面试没回答上的问题2]IOS上给body绑定click事件的bug

发布时间:2016-12-19 11:37:23编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"[ 面试没回答上的问题2]IOS上给body绑定click事件的bug ",主要涉及到[ 面试没回答上的问题2]IOS上给body绑定click事件的bug 方面的内容,对于[ 面试没回答上的问题2]IOS上给body绑定click事件的bug 感兴趣的同学可以参考一下。

  面试被问到ios上的bug,自己提到绑定click事件的bug,但是并没有把问题讲的很清楚,这里再清理一下思路。

  这个bug只在IOS上有,包括ihone,ipad,由于ios浏览器都用的safari内核,所以ios浏览器全部中枪。

  bug描述

  在进行事件委托时,如果将未存在于DOM的元素事件直接委托到body上的话,会导致事件委托失效,调试结果为事件响应到body子元素为止,既没有冒泡到body上,也没有被body所捕获。但如果事件是DOM元素本身具有的,则不会触发bug。换而言之,只有元素的非标准事件(比如click事件之于div)才会触发此bug。

   

  1. 如何避免bug触发:不要委托到body结点上,委托到任意指定父元素都可以,或者使用原生具有该事件的元素,如使用click事件触发就用a标签包一层。

  2. 使用touch事件代替click,如果是弹出层会有点透的问题存在。
  3. 已触发如何修补:safari对事件的解析非常特殊,如果一个事件曾经被响应过,则会一直冒泡(捕获)到根结点,所以对于已大规模触发的情况,只需要在body元素的所有子元素绑定一个空事件就好了,如:

    ("body > *").on("click", function(){};);

    可能会对性能有一定影响,但是使用方便,大家权衡考虑吧~~~


上一篇:使用Fragment的两种方式:<fragment>与<FrameLayout>
下一篇:[UWP]创建自定义VisualState Trigger - Yang

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款