2011-09-04 31 views
3

所以我一直在尋找在jQuery source,我發現這一點:差()

delegate: function(selector, types, data, fn) { 
    return this.live(types, data, fn, selector); 
}, 

所以.delegate()功能非常簡單,只是在.live()功能。 只有區別是參數的順序!爲什麼jQuery的人會做這樣的事情?

+2

你看過文檔嗎? – SLaks

+0

查看http://stackoverflow.com/questions/4579117/jquery-live-vs-delegate – Garett

回答

2

的人,你對事件處理一個很好的控制省略對liveselector參數,我敢打賭大多數人甚至不知道該選擇參數有。

delegate()可讓您輕鬆訪問selector參數,該參數允許您將您的事件偵聽器的「範圍」僅限於整個dom的子集,這可以帶來更好的性能。

在傳遞內聯匿名函數後提供附加參數很尷尬。由於選擇器參數非常有用,因此jquery創建更方便的表單很有意義。

參見: http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/

+0

你說過:「我敢打賭,大多數人甚至不知道選擇器參數在那裏。」當http://api.jquery.com/live/上的官方文檔顯示.live()的以下語法時,人們應該如何知道「選擇器」參數?A).live(events,handler) B).live(事件[,數據],處理程序)C).live(事件)。選擇器參數不會出現在官方文檔語法的任何地方。 –

1

他們是完全一樣的,除了:

  1. .delegate()讓您縮小事件處理某個元素上, 而.live()必須處理在整個頁面的事件,因爲`現場重視的事件處理程序,在文檔級別。
  2. .live()利用從元素冒泡的事件,直到delegate在應用了delegate的元素處停止的文檔。
  3. 使用delegate比一般live
+0

我認爲生活的第四個理由是上下文。所以實際上,您可以將活動附加到比文檔級別更具體的位置。 – Randomblue

+0

@Randomblue我不明白爲什麼當根據我在http://api.jquery.com/live/上看到的語法來允許「第四個參數」時,允許的最大參數數量是3,是我從1.4版本中看到的:.live(events [,data],handler)。 –