on绑定阻止冒泡失败

使用zepto库,有如下dom

1 <div id="J_parent">
2         <a href="#">
3             <span>点我有惊喜</span>
4         </a>
5 </div>    

以上div内的节点是后续生成的,通过on绑定事件:

1 $(‘#J_parent‘).on(‘tap‘,  ‘span‘, function(e){
2     e.preventDefault();
3     e.stopPropagation();
4     console.log(‘span‘);
5 });
6
7 $(‘#J_parent‘).on(‘tap‘,  ‘a‘, function(e){
8     console.log(‘a‘);
9 });

此时点击span区域,控制台会打出:

‘span‘

‘a‘

阻止冒泡失败,此时可以通过在a的绑定事件里判断e.target,如下:

1 $(‘#J_parent‘).on(‘tap‘,  ‘a‘, function(e){
2     if(e.target.nodeName == ‘SPAN‘){
3         return;
4     }
5     console.log(‘a‘);
6 });

这样点击span区域,控制台会打出:

‘span‘

ps:

移动网页中click较tap有延迟;

target与currentTarget的区别,如以上a的绑定事件代码中,如果点击span区域,此时e.target为span,而e.currentTarget为a。更专业的说明:

target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。

时间: 2024-10-07 05:45:39

on绑定阻止冒泡失败的相关文章

on事件绑定阻止冒泡的问题

当使用on进行事件绑定时当要给document绑定click,而子元素要禁止冒泡,那么子元素里面的子元素的click事件就会无效了, 下面无效版: $('#queue').on('click', '.link', function() { var t = $(this) ,box = t.next() if(t.hasClass('active')) { box.hide() t.removeClass('active') } else { box.show() t.addClass('acti

JQuery阻止冒泡事件on绑定中异常情况分析

科普下事件冒泡以及默认行为,以下面例子举列子: 事件冒泡:当点击内部button元素时,会触发自身及外层 a的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. 事件冒泡可能会引起意料之外的效果,有时候需要阻止事件的冒泡行为. 默认行为:例子中a的href跳转链接就是所谓的默认行为,或者是表单form的提交. JQuery中阻止冒泡常用到的有以下3个方法: 1:event.stopPropagation();  只阻止了冒泡事件, 默认行为没有阻止 2:event.pr

jQuery阻止冒泡和HTML默认操作

jQuery是一个快捷简便的JavaScript框架,说道框架可以直接理解为就是对原来底层的东西进行了封装使得开发者能够利用这个框架快速开发. 1:jQuery是一个快捷简便的JavaScript框架,说道框架可以直接理解为就是对原来底层的东西进行了封装使得开发者能够利用这个框架快速开发. 2:在当今的各个浏览器中都支持事件的冒泡,所谓的冒泡可以这样理解: 条件:外层有一个DIV元素,在内层有一个P元素,他两存在这样的关系:DIV是P元素的父元素,而P是外层DIV的子元素,他们之间存在包含和被包

js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME)

网上有关这方面的代码比较多而乱,这里整理一下并加以改进. 添加事件 var addEvent = function( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj.attachEvent( "on"+type, function() {

jquery阻止冒泡事件:$(&#39;span&#39;).bind(&quot;click&quot;,function(event){event.stopPropagation();})(有用源)

冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. <body> <div id="content"> 外层div元素 <span>内层span元素</span> 外层div元素 </div> <div id="msg"></div> </body> <script type="text/javascript"> $(funct

阻止默认行为 阻止冒泡

什么是默认行为? var a = document.getElementById('a'); a.addEventListener('click',function(e){ e.preventDefault(); },false); 兼容性问题: function preventDefault(event){ var event = $$.getEvent(event); if(event.preventDefault){ event.preventDefault(); }else{ event

点击tr实现选择checkbox功能,点击checkobx的时候阻止冒泡事件, jquery给checkbox添加checked属性或去掉checked属性不能使checkobx改变状态

给tr添加点击事件,使用find方法查找tr下的所有层级的元素,children只查找下一层级的元素,所以使用find.find的返回值为jquery对象,在这个项目中不知道为什么使用jquery给checkbox添加checked属性或去掉checked属性不能使checkobx改变状态,所以我就把jquery对象转换为DOM对象,怎么转呢?jquery对象[0]或者get(0)就转换成DOM对象,然后直接.checked返回true或false就可以判断checkbox是否选中了.然后判断状

阻止冒泡

当父元素有点击事件,子元素也有点击事件时,点击子元素会同时触发 子事件和父事件,解决方法: <body> <div class="a"> 好友<span>+</span> </div> <script type="text/javascript"> var a = document.querySelector(".a"); var span = document.queryS

弹出菜单 阻止冒泡

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>弹出菜单,阻止冒泡</title> <style> </style> <script src="jquery-1.9.1.js"></script> <script> $(fu