首先我在网上看到不少文章大体上分为两个(不正确)观点:

1. cancelBubble用于ie的阻止冒泡事件,event.stopPropagation()用于firefox和chrome等其他浏览器。

先不讲上面是对是错

先看一个例子:(测试环境:chrom5.0.275.7,  moz3.6.4,   opera10.53,   ie6,7,8)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>无标题页</title>
</head>
<body onclick="alert('body');">

<input id="Button1" type="button" value="button" onclick="clickBtn(event)" />
    <script language="javascript" type="text/javascript">
        function clickBtn(event)
        {
            event=event?event:window.event;
            event.cancelBubble=true;
            alert(event.cancelBubble);
        }
    </script>
</body>
</html>

经过测试:

a,chrom5.0.275.7,   opera10.53,   ie6,7,8在这几个浏览器中  , cancelBubble是有效的,并且可以阻止事件冒泡,使body的onclick不能触发。只触发button的click

alert(event.cancelBubble);输出结果true

b,在  moz3.6.4版本内,是不能阻止body的onclick的,但是alert(event.cancelBubble);输出结果仍然是true ,我想这应该是event.cancelBubble只是给event添加一个属性,并且赋值为true;

当把js代码改成这样时:

   <script language="javascript" type="text/javascript">
        function clickBtn(event)
        {
            event=event?event:window.event;
            event.stopPropagation();
            alert("123");
        }
    </script>

即可有效阻止。当然在chrome,opera中的 event.stopPropagation();也是有效的,

结论一:以上说明 event.cancelBubble在新版本chrome,opera浏览器中已经支持,就差moz了,其实个人认为event.cancelBubble比event.stopPropagation()更好,不仅从英文意思上。所以希望moz再发新版本  也支持。这样就兼容了

2.还有就是经常看的关于事件顺序的问题:

不完全准确的结论(自认为)

ie:源事件元素->>父级元素事件->>body-->>document

moz:等其他浏览器与上面相反

先看一个例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>无标题页</title>
</head>
<body onclick="alert('body');">

<div onclick="clickBtn(event)"  style="width:100px;height:100px; background:#666;">
        <input id="Button1" type="button" value="button" onclick="alert('btn');" />
    </div>
    <script language="javascript" type="text/javascript">
        function clickBtn(event)
        {
            event=event?event:window.event;
            event.stopPropagation();
            alert("123");
        }
    </script>
</body>
</html>

如果按照上面的观点   我现在点击button    事件从  body---->div----->button,,,,那么就是 先alertbody然后再触发div弹出123,由于阻止冒泡,所以button的click不会触发。

但经过我们测试。moz还是按照由内向外触发。正确的执行alert("btn")--->>alert("123")----阻止冒泡  不触发body的click事件

到这你是不是会怀疑上面不正确,不过上面的讲法对用addListenter和attachEvent添加的事件是正确的()。如:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>无标题页</title>
</head>
<body>

<ul id='ul'>  
            <li id='li1'>List Item1</li>  
            <li id='li2'>List Item2</li>  
    </ul> 
    <script language="javascript" type="text/javascript">
            function init(){  
             if(!!document.all){
                document.getElementById('li1').attachEvent('onclick', function(event){  
                    alert('li1');  
                })  
                document.getElementById('li2').attachEvent('onclick', function(event){  
                    alert('li2');  
                }) 
                document.getElementById('ul').attachEvent('onclick', function(event){  
                    alert('ul');  
                    //event.cancelBubble = true; 
                    alert(event.stopPropagation); 
                });  
             }else{
                document.getElementById('li1').addEventListener('click', function(event){  
                    alert('li1');  
                }, true)  
                document.getElementById('li2').addEventListener('click', function(event){  
                    alert('li2');  
                }, true) 
                document.getElementById('ul').addEventListener('click', function(event){  
                     event=event?event:window.event;
                     event.stopPropagation();
                     alert('ul'); 
                }, true);  
                  
              }
            }  
            init();
    </script>
</body>
</html>

用这种方法 是符合的。执行结果是触发ul的click事件然后由于阻止了冒泡所以此时你点击li时,其本身的click事件不触发。(顺便说一句,用这种动态添加事件的方法,好像 event.cancelBubble在moz中也有效了不过在chrome和moz中有区别

关于event.cancelBubble和event.stopPropagation()的困惑相关推荐

  1. event.stopPropagation/event.preventDefault()/event.cancelBubble等Event属性含义

    Event 接口表示在 DOM 中出现的事件. event.bubbles: 返回一个布尔值,表明当前事件是否会向DOM树上层元素冒泡. event.cancelable: 只读属性 cancelab ...

  2. event.cancelBubble=true e.stopPropagation() 取消事件处理,阻止事件

    <tr><a href="xxx">连接</a></tr> 如上结构,单击tr的时候跳转至另一页 <tr style=&quo ...

  3. event.cancelBubble与event.stopPropagation()

    在火狐Firefox.opera.IE下阻止冒泡事件是不同的代码的,火狐下使用的是event.stopPropagation(),而IE下使用的是cancelBubble,jQuery 可以使用e.s ...

  4. JS事件cancelBubble、event.preventDefault()与event.stopPropagation()简单介绍

    推荐看原文:https://blog.csdn.net/iamlegendary/article/details/54409038 cancelBubble用于ie的阻止冒泡事件. event.sto ...

  5. event.cancelBubble的理解

    Bubble就是一个事件可以从子节点向父节点传递,比如鼠标点击了一个TD,当前的event.srcElement就是这个TD,但是这种冒泡机制使你可以从TR或者Table处截获这个点击事件,但是如果你 ...

  6. 关于event.cancelBubble

    http://www.cnblogs.com/quanhai/archive/2010/04/15/1712277.html 由于HTML中的对象都是层次结构,比如一个Table包含了多个TR,一个T ...

  7. html,js 中如何屏蔽div子元素点击事件会触发父元素的点击事件($event.cancelBubble=true;)

    1. 第一种方法:html中屏蔽父元素的点击事件($event.cancelBubble=true;) <div (click)="select($event)"> & ...

  8. Event.preventDefault 、Event.stopPropagation 和 Event.stopImmediatePropagation

    Event.preventDefault() 取消浏览器对当前事件的默认行为. Event.stopPropagation() 阻止事件冒泡. Event.stopImmediatePropagati ...

  9. event.cancelBubble=true 取消事件处理

    <tr><a href="xxx">连接</a></tr> 如上结构,单击tr的时候跳转至另一页面 <tr style=&qu ...

最新文章

  1. 20145328《网络对抗》Web基础
  2. 我们已经不用 AOP 做日志很久了!
  3. linux系统根分区挂载出错 系统无法,用虚拟机安装linux时显示“没有定义根文件系统,请到分区菜单以修正此错误”,是什么意思,肿么弄谢谢各位...
  4. dfmea文件_技术干货合集「失效分析、PFMEA DFMEA关系、文件结果化」
  5. 关于AJAX的安全性
  6. spring freemarker 获取后端的值
  7. Apollo中Eureka,metaService,configService关系
  8. 信息学奥赛一本通1368 对称二叉树
  9. DEJA_VU3D - Cesium功能集 之 050-纯前端空间体体积计算
  10. 【论文笔记】Contextual Diversity for Active Learning(ECCV2020)
  11. 数商云DMS渠道商城系统全渠道营销场景应用举例,赋能日化行业增强渠道掌控力
  12. mybatis小结(1)
  13. VSCode C++ control reaches end of non-void function [-Wreturn-type]
  14. python简单语法题_Python练习+简单语法摘要,习题,总结
  15. silverlight ajax调用,基于RIA的AJAX和Silverlight研究与应用
  16. PMP项目管理是什么意思?
  17. 一文带你看懂软件测试职业发展规划
  18. c语言指针强制类型转换的应用
  19. 基因共表达网络分析java,基因共表达——基因共表达网络分析
  20. ASEMI贴片整流桥堆TBM610怎么测量好坏

热门文章

  1. 在校大学生想当程序员,听老叔这番话,你会少走很多弯路【18年开发经验分享】
  2. basler恢复出厂设置_如何恢复您的Xbox出厂设置
  3. PHP -php中的数组
  4. 阿里云服务器CUP爆满被用来当挖矿机(要疯!!!!)
  5. 卷积核膨胀(dilation)解析
  6. Cadence Allegro异型焊盘走线(出线)在焊盘外怎么解决?
  7. protobuf3 自定义option_Protobuf3 系列二 定义复杂的proto文件
  8. 如何成为一名iOS开发高手
  9. 关于Jmeter一直报红
  10. Tomcat 在 IDEAJ 编辑器中乱码问题