很早就想好好总结一下事件机制了,终于有动力写了。文章分为上下2部分
JS和HTML的交互是通过事件来实现的。事件就是文档中发生的一些特定的交互瞬间。
事件流
当浏览器发展到第四代时(IE4 和 netscape Communicator 4),开发团队遇到了一个有意思的问题:页面的哪一部分会拥有某个特定的事件,可以想象在一张纸上画一组同心圆,如果把手指放在圆心上,那么你的手指指向的不是一个圆,而是所有的圆。2家公司看待事件的想法是一致的。当你点击了一个按钮,他们都认为是点击不仅仅发生在按钮上。也就是说 当你点击按钮,你也点击了按钮的容器元素,甚至可以说点击了整个页面。
事件流描述的是,页面接收事件的顺序。IE和Netscape开发团队居然提出了完全相反的事件流的概念。IE的事件流是事件冒泡流,netScape是事件捕获流。
事件冒泡
IE的事件流流叫事件冒泡(event bubbling)
所有的现代浏览器都是支持事件冒泡,但是具体实现上有一点区别。
IE5.5及其更早的版本会跳过html直接到document
事件捕获
netscape 团队提出的另一种事件流叫事件捕获。事件捕获的思想是不太具体的节点应该更早的接收到事件,具体的节点应该最后接受到事件。它的目的是在事件到达预定目标之前捕获它。
DOM事件流
IE9、Opera、Firefox、Chrome、Safari都是支持DOM事件流的。IE8及更早的版本不支持
DOM 2级事件规定事件流包括3个阶段,事件捕获阶段、处于目标阶段、事件冒泡阶段。
首先发生的事件捕获,为截取事件提供了机会。然后是实际的目标接受事件,最后一个阶段是冒泡阶段。
DOM事件级别
Dom事件主要分为3个级别,DOM 0 级、DOM2级、DOM3级,但是还有一个HTML事件,直接内嵌在HTML里面的。
HTML事件