JS 中的事件綁定、事件監(jiān)聽、事件委託
事件綁定
- 要想讓
JavaScript對用戶的操作作出響應(yīng),首先要對DOM元素綁定事件處理函數(shù)。所謂事件處理函數(shù),就是處理用戶操作的函數(shù),不同的操作對應(yīng)不同的名稱
在
JavaScript中,有三種常用的綁定事件的方法- 在
DOM元素中直接綁定; - 在
JavaScript代碼中綁定; - 綁定事件監(jiān)聽函數(shù)
- 在
在DOM中直接綁定事件
|
|
在JavaScript代碼中綁定事件
- 在
JavaScript代碼中(即script標(biāo)籤內(nèi))綁定事件可以使JavaScript代碼與HTML標(biāo)籤分離,文檔結(jié)構(gòu)清晰,便於管理和開發(fā)
|
|
使用事件監(jiān)聽綁定事件
- 關(guān)於事件監(jiān)聽,W3C規(guī)範(fàn)中定義了3個(gè)事件階段,依次是捕獲階段、目標(biāo)階段、冒泡階段
- 起初
Netscape制定了JavaScript的一套事件驅(qū)動機(jī)制(即事件捕獲)。隨即IE也推出了自己的一套事件驅(qū)動機(jī)制(即事件冒泡)。最後W3C規(guī)範(fàn)了兩種事件機(jī)制,分為捕獲階段、目標(biāo)階段、冒泡階段。IE8以前IE一直堅(jiān)持自己的事件機(jī)制(前端人員一直頭痛的兼容性問題),IE9以後IE也支持了W3C規(guī)範(fàn)
W3C規(guī)範(fàn)
- 語法
|
|
event: (必需)事件名,支持所有DOM事件。function:(必需)指定要事件觸發(fā)時(shí)執(zhí)行的函數(shù)。useCapture:(可選)指定事件是否在捕獲或冒泡階段執(zhí)行。true,捕獲。false,冒泡。默認(rèn)false註:
IE8以下不支持
|
|
IE標(biāo)準(zhǔn)
- 語法:
|
|
event:(必需)事件類型。需加「on「,例如:onclick。function:(必需)指定要事件觸發(fā)時(shí)執(zhí)行的函數(shù)
|
|
事件監(jiān)聽的優(yōu)點(diǎn)
- 可以綁定多個(gè)事件
|
|
常規(guī)的事件綁定只執(zhí)行最後綁定的事件
|
|
兩個(gè)事件都執(zhí)行了
- 可以解除相應(yīng)的綁定
|
|
- 封裝事件監(jiān)聽
|
|
事件委託
- 事件委託就是利用冒泡的原理,把事件加到父元素或祖先元素上,觸發(fā)執(zhí)行效果
|
|
事件委託優(yōu)點(diǎn)
- 提高JavaScript性能。事件委託可以顯著的提高事件的處理速度,減少內(nèi)存的佔(zhàn)用
- 傳統(tǒng)寫法
|
|
- 事件委託
|
|
- 動態(tài)的添加DOM元素,不需要因?yàn)樵氐母膭佣薷氖录壎?/li>
- 傳統(tǒng)寫法
|
|
- 點(diǎn)擊item1到item3都有事件響應(yīng),但是點(diǎn)擊item4時(shí),沒有事件響應(yīng)。說明傳統(tǒng)的事件綁定無法對動態(tài)添加的元素而動態(tài)的添加事件。
- 事件委託
|
|
- 當(dāng)點(diǎn)擊item4時(shí),item4有事件響應(yīng)。說明事件委託可以為新添加的DOM元素動態(tài)的添加事件





