1.DOM事件模型
DOM支持兩種事件模型:
- 捕獲型模型
- 冒泡型模型
先看下面的代碼
<div class=爺爺>
<div class=爸爸>
<div class=兒子>
文字
</div>
</div>
</div>
給三個div分別添加事件監(jiān)聽fnYe/fnBa/fnEr
點擊文字,最先調(diào)用哪個函數(shù)
- 都行,可能先fnYe也可能先fnEr
2002年,W3C發(fā)布標(biāo)準(zhǔn)
- 文檔名為DOM Level 2 Events Specification
- 規(guī)定瀏覽器應(yīng)該同時支持兩種調(diào)用順序
- 首先按從上到下的順序看是否有函數(shù)監(jiān)聽(先從window,再到document,然后是html標(biāo)簽风纠,然后是body標(biāo)簽,然后按照普通的html結(jié)構(gòu)一層一層往下傳牢贸,最后到達目的標(biāo)簽)
- 然后按從下到上的順序看有沒有函數(shù)監(jiān)聽
- 有監(jiān)聽函數(shù)就調(diào)用竹观,并提供事件信息,沒有就跳過
!!術(shù)語!!
- 從外到內(nèi)找監(jiān)聽函數(shù)潜索,叫事件捕獲
- 從內(nèi)到外找監(jiān)聽函數(shù)栈幸,叫事件冒泡
示意圖
2. DOM事件委托(事件代理)
對“事件處理程序過多”的問題的解決方案就是事件委托。事件委托就是利用事件冒泡帮辟,只指定一個事件處理程序,就可以管理某一類型的所有事件玩焰。
優(yōu)點:
- 省監(jiān)聽數(shù)(即是省內(nèi)存)
- 可以監(jiān)聽動態(tài)元素
資料來源:饑人谷