(1) 事件冒泡
浏览器
IE 的事件流叫作事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,而后逐级向上传播到较为不具体的节点(文档)。
函数
(2) 事件捕获
this
事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预约目标以前捕获它。
spa
(3) DOM事件流
对象
“ DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。首先发生的是事件捕获,为截获事件提供了机会。而后是实际的目标接收到事件。最后一个阶段是冒泡阶段,能够在这个阶段对事件作出响应。
seo
(4) 事件处理程序
事件
事件就是用户或浏览器自身执行的某种动做。诸如 click、 load 和 mouseover,都是事件的名字。而响应某个事件的函数就叫作事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,所以click 事件的事件处理程序就是 onclick, load 事件的事件处理程序就是 onload。为事件指定处理程序的方式有好几种。
ip
(5) DOM0 级事件处理程序
作用域
经过 JavaScript 指定事件处理程序的传统方式,就是将一个函数赋值给一个事件处理程序属性。这种为事件处理程序赋值的方法是在第四代 Web 浏览器中出现的,并且至今仍然为全部现代浏览器所支持。缘由一是简单,二是具备跨浏览器的优点。要使用 JavaScript 指定事件处理程序,首先必须取得一个要操做的对象的引用。
rem
将事件处理程序设置为 null 以后,再单击按钮将不会有任何动做发生。
(6) DOM2 级事件处理程序
“ DOM2 级事件” 定义了两个方法,用于处理指定和删除事件处理程序的操做: addEventListener()和 removeEventListener()。全部 DOM 节点中都包含这两个方法,而且它们都接受 3 个参数:要处理的事件名、做为事件处理程序的函数和一个布尔值。最后这个布尔值参数若是是 true,表示在捕获阶段调用事件处理程序;若是是 false,表示在冒泡阶段调用事件处理程序。
与 DOM0 级方法同样,这里添加的事件处理程序也是在其依附的元素的做用域中运行。使用 DOM2 级方法添加事件处理程序的主要好处是能够添加多个事件处理程序。
大多数状况下,都是将事件处理程序添加到事件流的冒泡阶段,这样能够最大限度地兼容各类浏览器。最好只在须要在事件到达目标以前截获它的时候将事件处理程序添加到捕获阶段。若是不是特别须要,咱们不建议在事件捕获阶段注册事件处理程序。
(7) IE事件处理程序
IE 实现了与 DOM 中相似的两个方法: attachEvent()和 detachEvent()。这两个方法接受相同的两个参数:事件处理程序名称与事件处理程序函数。因为 IE8 及更早版本只支持事件冒泡,因此经过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。
在 IE 中使用 attachEvent()与使用 DOM0 级方法的主要区别在于事件处理程序的做用域。在使用 DOM0 级方法的状况下,事件处理程序会在其所属元素的做用域内运行;在使用 attachEvent()方法的状况下,事件处理程序会在全局做用域中运行,所以 this 等于 window。
(8) 事件对象
在触发 DOM 上的某个事件时,会产生一个事件对象 event,这个对象中包含着全部与事件有关的信息。包括致使事件的元素、事件的类型以及其余与特定事件相关的信息。例如,鼠标操做致使的事件对象中,会包含鼠标位置的信息,而键盘操做致使的事件对象中,会包含与按下的键有关的信息。全部浏览器都支持 event 对象,但支持方式不一样。