转载声明:文章来源:https://blog.csdn.net/tzp1025029729/article/details/76999284
 1、DOM 事件流 
  · 以程序的角度说,流是具有方向的数据。
   · 事件流所描述的就是从页面中接受事件的顺序。
   · 事件捕获:它认为当某个事件发生时,父元素应该更早接收到事件,具体元素则最后接收到事件。
   · 事件冒泡:事件冒泡即事件开始时,由最具体的元素接收(也就是事件发生所在的节点),然后逐级传播到较为不具体的节点。
   DOM事件流包括三个阶段:
    1. 事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。
    2. 处于目标阶段
    3. 事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。
· addEventListener最后一个参数,为true则代表使用事件捕获模式,false则表示使用事件冒泡模式。
2、浏览器中事件冒泡事件 
 每个 event 都有一个 
 event.bubbles 
 属性,可以知道它可否冒泡。( W3C 定义的事件接口 ) 
支持事件冒泡的事件: 
 beforeinput | click | compositionstart | compositionupdate | compositionend | dblclick | focusin | focusout | input | keydown | keyup | mousedown | mouseup | mousemove | mouseout | mouseover | scroll | select | wheel 
不支持事件冒泡的事件: 
 abort | blur | error | focus | load | mouseenter | mouseleave | resize | unload 
3、addEventListener 
 默认情况下,事件使用冒泡事件流,不使用捕获事件流。 
 addEventListener事件可以显示的指定是使用事件捕获还是事件冒泡。 
 ele.addEventListener('click',doSomething2,true) ;  
   · true=捕获
   · false=冒泡
4、IE 的 attachEvent 存在的问题 
   1.IE下的 attachEvent 方法不支持捕获,和传统事件注册没多大区别(除了能绑定多个事件处理函数)。
   2.IE的 attachEvent 方法存在内存泄漏问题!
   3.使用 attachEvent 时在事件处理函数内部,this指向了window,而不是obj!
   4.同一个函数可以被注册到同一个对象同一个事件上多次。
5、addEventListener 和 attachEvent 的区别 
 二者有个本质上的区别,attachEvent 的事件处理程序会在 
 全局作用域 
 中运行, 
 this等于window对象 
 而 addEventLinstener 添加的事件处理程序是在 
 其依附的元素的作用域 
 中运行的, 
 this等于绑定元素对象 
6、绑定多个事件的执行顺序: 
 IE8 绑定多个事件按添加的相反顺序执行,IE6 和 IE7 是随即执行的,非 IE 也就是addevenetListener 按添加的顺序执行。 
7、el.onclick和addEventListener和attachEvent有什么区别呢? 
 本质的区别是 el.onclick 相当于在标签上写 onclick,用 addEventListener 和 attachEvent 是通过 DOM 接口去绑定事件。 
 一个 html 文档的解析是有顺序的,先解析标签项,再解析 DOM 项,el.onclick 事实上相当于写在标签上,通过标签的 onclick 属性输入到文档,然后由文档解析成事件的。而后者,要在文档解析完成以后,通过文档的 DOM 接口去绑定的事件,虽然结果是一样的,都是 click 事件,但是过程是不同的。 
 onclick 给事件绑定多个监听器时只会执行最后一个,而 addEventListener 和 attachEvent 会执行多个。 
8、el.onclick和addEventListener和attachEvent 绑定的事件怎么取消? 
     el.onclick:el.οnclick=null; 这样就可以取消绑定在 el 上的事件处理程序了。
     通过 addEventListener() 添加的事件处理程序只能通过 removeEventListener() 来移除,并且移除时传入的参数与添加处理程序时使用的参数相同。通过addEventListener() 添加的匿名函数将无法移除。
     通过 attachEvent() 添加的事件处理程序要通过 detachEvent() 来移除,其他的情况和 addEventListener() 一样。
9、阻止事件传播和默认行为 
 阻止事件传播: 
   · 在W3c中,使用 e.stopPropagation() 方法
   · 在IE下设置cancelBubble = true;
   · 封装阻止事件冒泡函数:

 取消默认行为: 
   · 在W3c中,使用preventDefault()方法;
   · 在IE下设置window.event.returnValue = false;
10、绑定事件的兼容性写法 

                
                    
                            
                            
                                    
                                    
帖子还没人回复快来抢沙发