所以我一直在尋找在jQuery source,我發現這一點:差()
delegate: function(selector, types, data, fn) {
return this.live(types, data, fn, selector);
},
所以.delegate()
功能非常簡單,只是在.live()
功能。 只有區別是參數的順序!爲什麼jQuery的人會做這樣的事情?
所以我一直在尋找在jQuery source,我發現這一點:差()
delegate: function(selector, types, data, fn) {
return this.live(types, data, fn, selector);
},
所以.delegate()
功能非常簡單,只是在.live()
功能。 只有區別是參數的順序!爲什麼jQuery的人會做這樣的事情?
的人,你對事件處理一個很好的控制省略對live
的selector
參數,我敢打賭大多數人甚至不知道該選擇參數有。
delegate()
可讓您輕鬆訪問selector
參數,該參數允許您將您的事件偵聽器的「範圍」僅限於整個dom的子集,這可以帶來更好的性能。
在傳遞內聯匿名函數後提供附加參數很尷尬。由於選擇器參數非常有用,因此jquery創建更方便的表單很有意義。
參見: http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/
你說過:「我敢打賭,大多數人甚至不知道選擇器參數在那裏。」當http://api.jquery.com/live/上的官方文檔顯示.live()的以下語法時,人們應該如何知道「選擇器」參數?A).live(events,handler) B).live(事件[,數據],處理程序)C).live(事件)。選擇器參數不會出現在官方文檔語法的任何地方。 –
他們是完全一樣的,除了:
.delegate()
讓您縮小事件處理某個元素上, 而.live()必須處理在整個頁面的事件,因爲`現場重視的事件處理程序,在文檔級別。.live()
利用從元素冒泡的事件,直到delegate
在應用了delegate
的元素處停止的文檔。delegate
比一般live
我認爲生活的第四個理由是上下文。所以實際上,您可以將活動附加到比文檔級別更具體的位置。 – Randomblue
@Randomblue我不明白爲什麼當根據我在http://api.jquery.com/live/上看到的語法來允許「第四個參數」時,允許的最大參數數量是3,是我從1.4版本中看到的:.live(events [,data],handler)。 –
一概而論把握基本思想是在總結https://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/:
jQuery開發團隊已經在V1.7宣佈將事件綁定呼籲一種新的方法。此方法結合了下面介紹的live,bind和delegate的功能,允許您根據傳遞的參數指定綁定方法,而不是使用不同的函數名稱。
你看過文檔嗎? – SLaks
查看http://stackoverflow.com/questions/4579117/jquery-live-vs-delegate – Garett