JS事件流机制

事件流指的是

1.节点的捕获
2.处理事件
3.事件的冒泡

目前分为事件冒泡流,事件捕获流;

区别:
1.事件冒泡流在事件冒泡阶段响应事件
2.事件捕获流在捕获节点过程响应事件。
3.大部分浏览器默认的都是事件源冒泡流的方式来响应事件
使用:
addEventListener最后一个参数, 为true则代表使用事件捕获模式 ,false则表示使用事件冒泡模式。

事件冒泡流是如何绑定到对应的元素上的?又是如何做出响应?

1.从根元素html一级一级往内寻找,直到找到id="getCopy"的元素
2.为这个元素处理click事件
3.根据事件冒泡法从这个元素一级一级往外响应事件,直到根节点

var btn = document.getElementById('getCopy');
btn.addEventListener('click',  function(){
    console.log('btn click');
}, false);

事件捕获流是如何绑定到对应的元素上的?又是如何做出响应?

1.从根元素html往内寻找,寻找过程中一级一级往内响应事件,直到找到id="getCopy"的元素
2.为这个元素处理click事件
3.从这个元素开始往外一级一级的事件冒泡,直到根节点

var btn = document.getElementById('getCopy');
btn.addEventListener('click',  function(){
    console.log('btn click');
}, true);

addEventListener同一个元素绑定相同的事件和方法,后一个会覆盖前一个

var btn = document.getElementById('getCopy');
var btnFun = function(){
    console.log('btn click');
}
btn.addEventListener('click', btnFun, false);//该事件被后一个覆盖
btn.addEventListener('click', btnFun, false);//输出 btn click

addEventListener同一个元素绑定相同的事件和不同的方法,后一个不会覆盖前一个

var btn = document.getElementById('getCopy');
btn.addEventListener('click', function(){
    console.log('btn click1');//输出 btn click1
}, false);
btn.addEventListener('click', function(){
    console.log('btn click2');//输出 btn click2
}, false);

阻止事件冒泡 stopPropagation

btn.addEventListener('click', function(event){
    console.log('btn click2');//输出 btn click2
    event.stopPropagation();
}, false);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,543评论 1 11
  • js之事件机制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驱动...
    道无虚阅读 2,414评论 0 2
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 3,075评论 1 10
  • 1. 事件冒泡与事件捕获 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念都是为了解决页面中事件流(事件发生...
    cbw100阅读 2,751评论 0 8
  • 捡起微博,发现自己不喜欢的平台很多平时没消息的人都在上面。 以前因为它太公共了,任何人都可以看,所以挺介意的。 但...
    渡河西阅读 236评论 0 0