2011-04-14 96 views
1

我們有一個應用程序,它使用了很多jquery的東西,我們將所有的腳本添加到一個init.js文件中,這個文件有很多.live("click"), .live("hover")等等,東西加上一些if($(".classname").length)添加.live點擊jQuery中的函數

我懷疑它可能會不必要地減慢我們的頁面(有些頁面不需要一些腳本)。但是什麼是更優雅的解決方案呢?我們當然不會爲每個需要它的頁面單獨提供一個文件,這是一個很難維護的問題。有沒有其他方法可以實現這一點?

+0

http://jscompress.com/ – Calum 2011-04-14 08:31:47

+0

我不認爲jscompress會在這一項上做得更好,因爲它可能放緩的原因是處理所有這些現場調用 – corroded 2011-04-14 09:34:20

回答

3

在函數中包裝頁面特定的東西,並在每個頁面上調用適當的函數。

另一種解決方案是將URL映射到函數並自動調用適用於當前URL的函數 - 然後在頁面本身上不需要任何JS。

爲您現場直播,你可以在身上使用委託,給身體一個特定的頁面級:$('body.page-xyz').delegate('your-live-selector', 'click', function(){...})

這僅如果身上有正確的類附加一個事件處理程序。

+2

+1我輸入的內容很多。 :-)第二個選項對我來說有點過於緊密,所以我更喜歡在每個頁面上都有一個內聯腳本塊來觸發適當的設置,但是我也會將它作爲一個選項加入,以防OP對此感覺不同。 – 2011-04-14 08:33:00

+0

嗯,我會更多地關注這個委託事項。所以委託只是首先尋找身體的課程?它的功能是否與它也附加到動態創建的元素中一樣? – corroded 2011-04-14 09:36:20

0

你可以使用getScript加載其他js文件。

+1

你可以,如果你想有進一步的HTTP請求開銷。最佳做法是*最小化* HTTP請求。 – 2011-04-14 08:33:41