2010-08-12 34 views
0

我有一個腳本,通過JQuery .live或.bind(還沒決定)在頁面中向頁面中的約500個元素添加單擊事件處理程序,並且我遇到了JQuery性能問題。等待JQuery完成.live()或.bind()綁定?

對於一個小的數據集,我可以加載頁面,只要頁面根據瀏覽器完成加載,我可以點擊某個東西然後離開我們。但增加數據集,頁面加載結束和我的點擊處理之間存在明確的延遲,我只能假設JQuery仍在處理附加事件處理程序 - 點擊處理正確,所以我假設它被排隊然後處理。

有什麼辦法可以讓jQuery在繼續之前等待.live()完成,換句話說,如果有意義的話,可以同步而不是異步地處理它。這樣,我可以在啓動.live()調用之前加載一個加載屏幕,並在完成時將其放下。

問候 武

回答

0

甲jQuery的.live()處理程序(或.delegate())要完成非常很快,不像.bind()結合每個元素。在這些情況下,您應該使用.live().delegate(),因爲.bind()的啓動成本遠遠超過父元素上處理程序的事件冒泡/偵聽成本。

+0

無論我使用.bind還是.live,都會發生延遲,除了這些特定調用之外,我看不到任何其他延遲原因。基本上,我的應用程序在$(document).ready中啓動,調用$('。MenuItem')。live(.....然後坐在那裏等待用戶交互。使用少量測試數據,該應用程序是即時可用,但增加了測試數據,我得到了上述處理第一次點擊的延遲。 – Moo 2010-08-12 16:47:21

+0

@Moo - '.live()'不會造成延遲,如果使用得當, on,'live()'在'document'上創建一個事件處理程序,這就是所有*它的作用,除綁定之外還發生了什麼? – 2010-08-12 17:02:19

+0

在這一點上?幾乎沒有任何東西 - 應用程序的整個其餘部分都可以工作綁定的點擊事件,沒有dom操作繼續,沒有動畫,沒有任何東西,直到發生點擊。 – Moo 2010-08-12 17:05:57