js事件相关知识
事件
事件就是用户或浏览器自身执行的某种动作,如click、load等,都是事件的名字。而响应某个事件的函数就是事件处理程序或事件侦听器,通常以“on+事件名字”命名,如onclick、onload。
事件最早是在IE3和Netscape Navigator2中出现的,当时是作为分担服务器运算负载的一种手段。在IE4和Navigator4发布时提供了相似但不相同的API。
事件流
从页面中接收事件的顺序。IE和Netscape开发团队提出了差不多是完全相反的事件流的概念。IE提出的是事件冒泡流,Netscape提出的是事件捕获流。
事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点或者目标节点)接收,然后逐级向上传播到较为不具体的节点(文档)。
事件捕获(event capturing),则与事件冒泡流思想相反,即事件开始由不太具体的节点接收,然后逐一向下传播到最具体的元素。它的用意在于事件到达预订目标之前捕获它。
区别:
概念:差不多相反的思想;
范围:所有的现代浏览器都支持事件冒泡,不同浏览器在具体实现上有所差别;事件捕获是Netscape Communicator唯一支持的事件流模型,但IE9、Safari、Chrome、Opera和Firefox目前也都支持这种事件流模型,但老版本的浏览器不支持。所以建议放心地使用事件冒泡,在有特殊需要时再使用事件捕获。
DOM事件流
“DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。首先发生的是时间捕获,为截获事件提供了机会,然后是实际目标接收到时间,最后是冒泡阶段,对事件作出响应。
“DOM2级事件”规范明确要求捕获阶段不会涉及事件目标,但IE9、Safari、Chrome、Firefox和Opera9.5以及更高版本都会在捕获阶段触发事件对象上的事件。结果就是有两个机会在目标对象上面操作事件。