第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評論
占位
占位

事件機制

jQuery對事件的綁定分別有幾個API

.bind()/.live()/.delegate()/.on()

不管是用什么方式綁定,歸根到底還是用addEventListener/attachEvent處理的,正如選擇器一樣不管如何匹配最終還是那么幾個瀏覽器接口處理,既然如此,事件為什么還要區(qū)分那么多不同的處理方案?

這里就要涉及到 DOM 事件處理模型了,就是常提到的捕獲與冒泡,傳統(tǒng)的事件處理給某一元素綁定了一個點擊事件,傳入一個回調(diào)句柄處理。

element.addEventListener('click',doSomething,false)

這樣的代碼再正常不過了,但是,如果頁面上有幾百個元素需要綁定(假設(shè)),那么務(wù)必就要綁定幾百次啦。
這樣問題就出現(xiàn)了:

第一:大量的事件綁定,性能消耗,而且還需要解綁(IE會泄漏)
第二:綁定的元素必須要存在
第三: 后期生成HTML會沒有事件綁定,需要重新綁定
第四: 語法過于繁雜

有沒有辦法優(yōu)化呢?答案是肯定的,那就是采用委托的機制

事件委托

DOM 有個事件流的特性,也就是說我們在頁面上觸發(fā)節(jié)點的時候事件都會上下或者向上傳播,事件捕捉和事件冒泡。

DOM2.0 模型將事件處理流程分為三個階段:

一、事件捕獲階段
二、事件目標階段
三、事件起泡階段


事件傳送可以分為3個階段。
(1)在事件捕捉(Capturing)階段,事件將沿著DOM樹向下轉(zhuǎn)送,目標節(jié)點的每一個祖先節(jié)點,直至目標節(jié)點。例如,若用戶單擊了一個超鏈接,則該單擊事件將從document節(jié)點轉(zhuǎn)送到html元素,body元素以及包含該鏈接的p元素。在此過程中,瀏覽器都會檢測針對該事件的捕捉事件監(jiān)聽器,并且運行這件事件監(jiān)聽器。
(2)在目標(target)階段,瀏覽器在查找到已經(jīng)指定給目標事件的事件監(jiān)聽器之后,就會運行該事件監(jiān)聽器。目標節(jié)點就是觸發(fā)事件的 DOM 節(jié)點。例如,如果用戶單擊一個超鏈接,那么該鏈接就是目標節(jié)點(此時的目標節(jié)點實際上是超鏈接內(nèi)的文本節(jié)點)。
(3)在冒泡(Bubbling)階段,事件將沿著DOM樹向上轉(zhuǎn)送,再次逐個訪問目標元素的祖先節(jié)點到document節(jié)點。該過程中的每一步。瀏覽器都將檢測那些不是捕捉事件監(jiān)聽器的事件監(jiān)聽器,并執(zhí)行它們。
利用事件傳播(這里是冒泡)這個機制,就可以實現(xiàn)事件委托

具體來說,事件委托就是事件目標自身不處理事件,而是把處理任務(wù)委托給其父元素或者祖先元素,甚至根元素(document)

委托這么好的特性 jQuery 當(dāng)然不會放過,所以就衍生出  .bind()、.live() .on()和.delegate(),jQuery 的事件綁定有多個方法可以調(diào)用,以 click 事件來舉例:

click方法
bind方法
delegate方法
on方法

這里要清楚的認識:不管你用的是(click / bind / delegate)之中哪個方法,最終都是 jQuery 底層都是調(diào)用 on 方法來完成最終的事件綁定。因此從某種角度來講除了在書寫的方便程度及習(xí)慣上挑選,不如直接都采用 on 方法來的痛快和直接。

所以在新版的 API 中都這么寫到:

.on()方法事件處理程序到當(dāng)前選定的 jQuery 對象中的元素。在jQuery 1.7中,.on()方法提供綁定事件處理的所有功能、效果不言而喻了,除了性能的差異,通過委托的事件還能很友好的支持動態(tài)綁定,只要 on 的delegate 象是 HTML 頁面原有的元素,由于是事件的觸發(fā)是通過Javascript的事件冒泡機制來監(jiān)測,所以對于所有子元素(包括后期通過JS生成的元素)所有的事件監(jiān)測均能有效,且由于不用對多個元素進行事件綁定,能夠有效的節(jié)省內(nèi)存的損耗。

任務(wù)

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數(shù)過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務(wù)號

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復(fù)提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關(guān)注公眾號
關(guān)注后,及時獲悉本課程動態(tài)

舉報

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費2個積分

繼續(xù)發(fā)表請點擊 "確定"

為什么扣積分?