面試中的一些小問題之事件流

事件流,描述的是從頁面中接收事件的順序,可是在IE中的事件流是事件冒泡流,而網景公司的事件流則是事件捕獲流。html

 

事件冒泡,即事件開始時由具體元素接收(文檔中嵌套最深的那個節點),而後逐級上升傳播到較爲不具體的節點(文檔)。

1 <!DOCTYPE html>
2     <head>事件流</head>
3      <body>
4         <div id="mydiv">Click Me</div>    
5     </body>
6 </html>

點擊文檔中的Click Me則這個click事件會按照以下順序傳播:瀏覽器

  div->body->html->document;spa

click點擊事件首先發生在div元素,而後依次向上傳播,知道document對象。全部現代瀏覽器都支持事件冒泡,可是在具體的實現中仍是有必定的差異,IE5.5及更早的版本中事件冒泡會跳過html,直接從body到document,在IE九、Firefox、Chrome、Safari中則將事件一直冒泡到window對象;firefox

事件捕獲,即不太具體的節點更早的接收到事件,而具體的節點最後接收到事件,事件捕獲的意義在事件到達預約目標以前捕獲它,這與事件冒泡是兩個相反的概念。

1 <!DOCTYPE html>
2     <head>事件流</head>
3      <body>
4         <div id="mydiv">Click Me</div>    
5     </body>
6 </html>

  同上面同樣的代碼,可是在事件捕獲中,document首先接收到click事件,而後沿着DOM樹依次向下,一直到Div元素。code

雖然事件捕獲是網景公司惟一支持的事件流模型,可是在IE九、firefox、Chrome、Opera、Safari瀏覽器中也是支持這種事件模型的,儘管「DOM2級事件」規範要求事件應該從document對象開始傳播,可是瀏覽器依然仍是從window對象開始捕獲事件的。htm

 

由於老版本瀏覽器不支持事件捕獲,因此儘可能使用事件冒泡,特殊須要時使用事件捕獲。對象

相關文章
相關標籤/搜索