1. 程式人生 > >Js中的事件委托/事件代理

Js中的事件委托/事件代理

按鈕 asc 不能 事件委托 style 次數 一個 dom span

什麽叫事件委托/事件代理呢 ? JavaScript高級程序設計上講:事件委托就是利用事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。 事件冒泡: 當事件發生後,這個事件就要開始傳播(從裏到外或者從外向裏),為什麽要傳播呢?因為事件源本身(可能)並沒有處理事件的能力,即處理事件的函數(方法)並未綁定在該事件源上。 例如我們點擊一個按鈕時,就會產生一個click事件,但這個按鈕本身可能不能處理這個事件,事件必須從這個按鈕傳播出去,從而到達能夠處理這個事件的代碼中. 事件委托: 是利用事件的冒泡原理來實現的,何為事件冒泡呢? 就是事件從最深的節點開始,然後逐步向上傳播事件,舉個例子: div > ul > li > a 比如給最裏面的a加一個click點擊事件,那麽這個事件就會一層一層的往外執行,執行順序:
有這樣一個機制,那麽我們給最外面的div加點擊事件,那麽裏面的 ul,li,a 做點擊事件的時候,都會冒泡到最外層的 div 上,所以都會觸發,這就是事件委托,委托它們父級代為執行事件. 為什麽要用事件委托: 一般來說,dom需要有事件處理程序,我們都會直接給它設事件處理程序就好了,那如果是很多的dom需要添加事件處理呢?比如我們有100個li,每個li都有相同的click點擊事件,可能我們會用for循環的方法,來遍歷所有的li,然後給它們添加事件,那這麽做會存在什麽影響呢 ? 在JavaScript中,添加到頁面上的事件處理程序數量將直接關系到頁面的整體性能,因為需要不斷的與dom節點進行交互,訪問dom的次數越多,引起瀏覽器重繪與重排的次數也就越多,就會延長整個頁面的交互就緒時間,這就是為什麽性能優化的主要思想之一就是減少DOM操作的原因;如果要用事件委托,就會將所有的操作放到js程序裏面,與dom的操作就只需要交互一次,這樣就能大大的減少與dom的交互次數,提高性能;

Js中的事件委托/事件代理