2014-02-26 49 views
0

我正在將項目中使用的jQuery版本升級到最新和最好的版本。 .live函數被用於許多地方來改變動態創建的顯示效果,並且效果很好,但是在jQuery的更高版本中移除了.live功能,因此需要重新制作。是否存在調用jquery.on(document.body)而不是特定元素的缺點

隨着標準化的編碼我正在考慮調用功能的方式:

$(document.body).on('click', '#clickableElement', function(){}) 

而不是

$("#clickableElement').on('click', function(){}) 

即使不會動態創建的對象上進行點擊的方法。

考慮到它是一個內部網站,少量的用戶,並且所有元素都提供了id,你是否看到了這個想法的缺陷?

+1

他們做了兩件完全不同的事情。如果您不需要授權,請勿使用授權。 –

+0

閱讀文檔。 – SLaks

回答

2

事件委託是一種推薦模式,因爲它有助於避免事件處理程序附加到稍後從DOM中刪除的DOM元素時可能發生的內存泄漏。

在大多數情況下,選擇器強制JS遍歷DOM樹,識別所有匹配項,併爲每個匹配元素附加一個事件處理函數的新實例。

儘管在一個非常具體的ID示例中都不是這種情況,但使用它作爲一般方法沒有缺點。授權文件根本的唯一缺點就是在事件到達身體之前取消事件的風險,這會阻止事件冒泡到您的處理程序。

0

事件代理並不總是使您的代碼更快。在某些情況下,這是有利的,在某些情況下不是。

當您實際需要事件委派以及何時從中受益時,您應該使用事件委派。否則,您應該將事件處理程序直接綁定到事件發生的對象,因爲這通常會更高效。

此外,您不應該綁定文檔級別的所有委託事件。這正是爲什麼.live()被棄用的原因,因爲當你有很多這樣綁定的事件時,這是非常低效的。對於委託事件處理,將它們綁定到最近的不是動態的父對象會更加高效。

相關問題