前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >js 事件冒泡和事件捕获

js 事件冒泡和事件捕获

原创
作者头像
用户1349575
发布2022-01-26 10:53:20
发布2022-01-26 10:53:20
3.2K00
代码可运行
举报
文章被收录于专栏:编程社区编程社区
运行总次数:0
代码可运行

事件冒泡:

事件冒泡由IE团队提出来的,即事件开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播。

IE9,chrome,Firefox,Opera,Safari都支持事件冒泡,并将事件冒泡到window对象。

如下,点击obj3,依次弹出obj3、world、hello。

代码语言:javascript
代码运行次数:0
运行
复制

<body>
  <div id="obj1">welcome
    <div id="obj2">hello
      <div id="obj3">world</div>
    </div>
  </div>
  <script type="text/javascript">
    var obj1 = document.getElementById('obj1');
    var obj2 = document.getElementById('obj2');
    var obj3 = document.getElementById('obj3');
    obj1.addEventListener('click', function () {
      alert('hello');
    });
    obj2.addEventListener('click', function () {
      alert('world');
    })
    obj3.addEventListener('click', function () {
      alert('obj3');
    })//依次弹出obj3、world、hello
  </script>
</body>

阻止事件冒泡的方法:

方式一:event.stopPropagation();

方式二:return false;

return false 不仅阻止了事件往上冒泡,而且阻止了事件本身。event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身。

事件捕获:

事件捕获是由Netscape Communicator团队提出来的,是先由最上一级的节点先接收事件,然后向下传播到具体的节点。

如下,点击obj3,依次弹出hello、world、obj3。

代码语言:javascript
代码运行次数:0
运行
复制
<body>
  <div id="obj1">welcome
    <div id="obj2">hello
      <div id="obj3">world</div>
    </div>
  </div>
  <script type="text/javascript">
    var obj1 = document.getElementById('obj1');
    var obj2 = document.getElementById('obj2');
    var obj3 = document.getElementById('obj3');
    obj1.addEventListener('click', function () {
      alert('hello');
    },true);
    obj2.addEventListener('click', function () {
      alert('world');
    },true)
    obj3.addEventListener('click', function () {
      alert('obj3');
    },true)//依次弹出hello、world、obj3
  </script>
</body>
removeEventListener() 

删除DOM2级事件处理程序,采用removeEventListener(),删除时传入的参数必须和绑定时传入的参数相同,不能传入匿名函数。

ps:IE8和IE8以下的版本不支持addEventListener(),而是采用attachEvent()来实现事件绑定。目前只有IE和Opera支持attachEvent()。IE9支持addEventListener(),同时也兼容IE8的attachEvent()方法,但是IE9和IE8对attachEvent()的实现有点不同。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档