2011-10-25 73 views
5

搜索沒有透露我的問題的解決方案,所以在這裏問。我一直在live live()中使用livequery()一段時間。通常,我使用live()來處理已知的事件,如click,但使用livequery在特定選擇器上觸發並應用插件。例如...將livequery轉換爲live/delegate /?

$('#childDomains').livequery(function() { 
    var element = $(this); 
    element.jqGrid({ 
    // plugin initialization here 
    }); 
}); 

我不知道是否有一種方法用活()/委託()或其他一些很酷的jQuery的功能,我不知道這樣做同樣的事情。我試圖減輕我的依賴負載,我注意到自02-2010以來livequery沒有更新。

更新:我想我不夠清楚。我有一個使用jqGrid的頁面,並將TABLE元素轉換爲jqGrid Ajax數據網格。沒有真正的點擊事件發生。此表所在的頁面通過ajax加載,並且在DOM看到$(「#childDomains」)時,它應該將jqGrid插件應用於該元素。就像我現場的例子所做的一樣。

從我迄今爲止的理解來看,如果沒有livequery,我不相信這是可能的,但我想要求確認。

回答

4

不,沒有明確更好的方法來做到這一點使用jQuery;我會說livequery是目前最好的方法。

這就是說其他可能的方式來做到這一點。 Here某人已經推出了自己的輪詢代碼來檢測元素何時插入到DOM中。你可以適應這一點,但據我所知,livequery已經爲你做了這個。

另一種方法是傾聽DOMNodeInserted事件,如here所述,但由於poor performance,因此這是deprecated in the W3C Level 3 Events Specification。它也是not IE compatible

This question對監視DOMNodeInserted事件和掛鉤到可以更改DOM的任何方法的替代方法有一些很好的討論。 (這有點舊了,但是從我的研究中還沒有任何變化)。

總之,繼續使用livequery。

還要注意的是從jQuery的1.7 .live()(deprecated),和.delegate()(superseded)應與.on()(和.die()與.off())所取代。新方法並沒有介紹任何可以解決livequery依賴的問題。