我使用
hammer.js,似乎我的event.stopPropagation()不适用于tap事件.
如果我单击该子项,则会触发关联的事件,但是父项的事件也被触发,我不想要.
$('#parent').hammer().bind('tap',function(e) { $(this).css('background','red'); }); $('#child').hammer().bind('tap',function(e) { e.stopPropagation(); $(this).css('background','blue'); });
解决方法
如另一个评论中所提到的那样,像你一样,人们会期望,调用event.stopPropagation()将是阻止事件从冒泡到父级的所有要求.
细节:但是,在Hammer.js中,这不是这样的. Hammer为您调用$(el).hammer()的每个元素创建一个新的手势状态机.因此,当浏览器触发小孩触摸事件时,首先由孩子的逻辑进行处理,然后再由父母的逻辑进行处理.因此,阻止父母获取分接事件,您必须防止父母的锤状态机获取原始的触摸事件.通常,调用event.stopPropagation()也将停止原始事件的传播.但是,hammer.js的tap事件在touchend被触发,但originalEvent是缓存的touchstart事件.因此,原始事件的停止传播没有任何效果,因为touchstart事件早已通过DOM冒泡了.
解?我相信这是一个锤子中的错误 – 提交一个拉动请求,以纠正tap事件中的originalEvent.正如其他人建议你可以检查事件的目标,但总是父元素 – 我的意见的另一个错误.所以改为检查event.originalEvent.target.这是一个JS fiddle这个平庸的解决方案实施:http://jsfiddle.net/HHRHR/
原文地址:https://www.jb51.cc/js/149830.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。