事件是DOM的重要的组成部分,不幸的是在DOM的level 1中并没有定义任何的事件,level 2中之定义了一小部分,直到level 3 中才把事件模型定义完成。IE首先在自己的4.0版本中实现了自己的事件模型,但是在以后的版本中并没有做大的改动,DOM最终确立的标准是吸收了IE的模型,并加以改进完成,mozilla保持了跟DOM做好的实现接近,Opera和Dafari也实现了DOM标准的时间模型,IE成了使用一种专有事件模型的主流浏览器。
时间流的出现意味着在页面上可有不仅一个元素相应同一个时间,而是按照一定的顺序响应该事件。
IE中使用的冒泡型事件:
<html οnclick="handleclick()">
<head><title>Example</title></head>
<body οnclick="handleclick()">
<div οnclick="handleclick()">Click Me</div>
</body>
</html>
在IE6中,当点击div元素时,事件首先在div上发生,之后将上升到body标签中,接着传到html标签,最后到document,这就是所谓的冒泡型事件,在IE5中是没有html标签层的事件的,所以如果不确定是IE5还是IE6的话,最好不用html元素级别上处理事件。
Mozilla浏览器也支持冒泡型事件,跟IE6的事件模型向下类似,但是支持的级别达到了window的层次,也就是说可以在window对象上使用事件处理函数。
捕获型事件:
捕获型事件跟冒泡型事件正好相反,是从做不精确的元素开始发生,还是一上面的代码为例,事件的发生顺序为window->document->html->body->div
DOM定义的标准事件流:
dom支持冒泡型事件和捕获型事件,捕获型的事件发生在前,冒泡在后,标准中所定义的事件的最高标准是document,但是兼容dom标准的浏览器一般都实现到了window层,在上面的例子中,事件发生的顺序是
window->document->body->div->div->body->document->window
注意:1.该顺序中没有html级别的事件(待考证)2.事件在目标元素上是连续接收了两次事件,捕获在前,冒泡在后
3.DOM标准中定义的事件是可以到达文本节点的级别的,就是说如果点击了div中的文本,那么也要发生下面的事件流的
window->document->body->div->text->text->div->body->document->window