2012-12-18 42 views
0

我有一個使用幾個JavaScript/jQuery插件的網站,然後我有一個default.js文件,它爲每個不同的頁面使用插件功能。在多個頁面上使用多個jQuery插件?

E.g.有些插件我有包括:

  • 一個自定義的滾動條插件
  • 幻燈片插件
  • 一個Cookie插件
default.js文件

然後,我會想辦法如下(僞代碼):

var scrolling = findScrollbarDiv; 
scrolling.ScrollFunction({ options }); 

(然後同爲幻燈片+其他插件我)

但是,如果有一個譜斑,其中findScrollbarDiv返回null,我得到一個錯誤類似以下內容:

ScrollFunction不是函數

這不是因爲元素返回null,而是因爲我沒有包含此頁面的插件文件。我的理由是,我不希望每個文件都包含在每個頁面上(即使不需要),因爲這可能會導致不必要的HTTP請求(尤其是在首頁上,只需要一個插件)

此錯誤反過來弄亂了JavaScript的其餘部分。

克服這個問題的最好方法是什麼?我是否應該在每個頁面中包含每個插件文件,而不管是否需要?或者是有一些JavaScript這樣我可以使用以下命令:

var scrolling = findScrollbarDiv; 
if(scrolling != null) { 
    scrolling.ScrollFunction({ options }); 
} 

(這種感覺有點笨重給我,但如果這是最好的解決辦法,讓我知道)

或正在使用一個默認的js文件啓動所有插件是一個壞主意?

+1

你說你不想把它包括在不需要的地方。在這種情況下顯然需要包括它。如果不希望在此頁面上指定「滾動」,則檢查空值是否正確。 – webnoob

+1

如果您唯一擔心的是所需的HTTP請求,您可以輕鬆地將所有插件/ jQuery本身組合到一個文件中(您可以使用GZIP和壓縮)。這樣,你會得到一個HTTP請求的一切。 – MarcoK

+0

我想過一個文件解決方案,但爲了可維護性我寧願將它們分開。我的另一個擔心是,即使使用組合/壓縮/ gzip文件仍然很大+文件中的任何更改都會使使用緩存無效(而不是使一個文件的緩存失效) – Sean

回答

1

如果您使用的是相同的頭文件,並且您不介意將文件包含在內,那麼可以在將事件附加到它之前始終檢查該元素是否存在。

下面有一個例子:

if(jQuery('#someElement').length > 0){ 
    jQuery('#someElement').ScrollFunction({ options }); 
} 

要麼,或具有用於每個功能的JavaScript文件。

所以你應該有一個用於畫廊,一個用於cookie等。並且只包括每個頁面所必需的。

+0

我曾希望避免這種情況,但經過反思,它似乎是最好的解決方案。謝謝 – Sean

1

你可以做它作爲一個條件語句,避免了笨重的,如果:

scrolling && scrolling.ScrollFunction({ options }); 

這對於你想打個電話要檢查,如果你做之前就存在父對象的任何方法的偉大工程。 你可以走得更遠(如果需要),並檢查方法本身執行之前就存在:

scrolling && scrolling.ScrollFunction && scrolling.ScrollFunction({ options }); 

如果滾動是一個集合,只是檢查它的長度(如果長度== 0的語句將失敗):

scrolling.length && scrolling.ScrollFunction({ options }); 
相關問題