首先声明,当目标对象是window对象或其他一些单独对象,eg:XMLHttpRequest时,就没事件传播啥事了,浏览器直接通过调用对象上的程序响应事件。而我们所说的事件传播是发生在事件目标是文档或文档元素的时候。
事件传播也就是我们平时说的事件流,分三个阶段:第一阶段发生在目标处理程序调用之前,就是我们通常说的"捕获”阶段;第二阶段是目标对象本身的处理程序调用;第三阶段就是冒泡阶段。我们平时关注的就是第二和第三阶段——事件捕获和事件冒泡。
事件冒泡
调用在目标元素上注册的事件处理函数后,大部分事件会“冒泡”到DOM树根,我们可以想象,就想一条鱼在水底喘了口气,然后气泡一直往上一直往上,直到到了水面。。给一个文档元素加各事件,然后这个事件会传给它的父级以及父级的父级。。传给body、传给document、传给window。这样自有它的妙用,比如我们遇到一个有大量单独文档元素的东西,每个单独文档元素都要加事件名称一样的事件,不太可能一个个加吧,多浪费时间,这时候在它们共同的祖先元素上注册一个处理程序来处理所有的事件。比如可以在form元素上注册change事件,就不用再每个元素上注册了。
代码如下:
延伸阅读
学习是年轻人改变自己的最好方式