2011-01-05 42 views
2

當使用第三方插件時,我通常在我的主要application.js文件中初始化它們。jQuery:我如何避免使用if語句來擺脫「未定義」錯誤

例子:

$('.scroll').jScrollPane(); 

的問題是,如果不具備scroll類網頁加載,然後我得到:

TypeError: Result of expression '$('.scroll').jScrollPane' [undefined] is not a function. 

因此,要解決這個問題,我把它包裝:

if ($(".scroll").length){ 
    $('.scroll').jScrollPane(); 
} 

這可以解決問題,但只是看起來像一個黑客。

有沒有「正確」的方法來解決這個問題?

+2

該錯誤似乎說,函數jScrollPane不存在,而不是該元素不存在。通常,jQuery中的0長度數組不會導致問題。 – 2011-01-05 22:10:51

回答

2

如果您收到:

ScrollPane' [undefined] is not a function. 

......它不會是因爲頁面不具有.scroll元素。

這種錯誤發生在插件(或jQuery本身)未加載時。

如果你打算重用的幾頁一些代碼,其中一些沒有這樣的插件,這樣做,而不是:

if ($.fn.jScrollPane){ 
    $('.scroll').jScrollPane(); 
} 
+0

應該指出的是,如果你不知道如果你將這個插件包含在特定的頁面上,這是一個完美的解決方案,但是,如果你期望它在頁面上,請確保它在你的jQuery腳本標籤下,並確保它正確鏈接。否則,請看我的例子。 – 2011-01-05 22:14:36

+0

@Oscar:是的,我認爲這是問題所在。聽起來你對這個插件有更多的經驗。 – user113716 2011-01-05 22:19:56

+1

這是一個混亂,雜亂的插件。我始終堅持將瀏覽器的瀏覽器用戶界面保留在瀏覽器中;) – 2011-01-05 22:21:18

0

可以使用try/catch塊...

try 
    { 
    $('.scroll').jScrollPane(); 
    } 
catch(err) 
    { 
    //Handle or ignore errors here 
    } 
0

呃......沒有; jQuery不能像那樣工作。 $("any selector")的呼叫將總是讓你回來一個準備使用(但空的)jQuery對象。我不認爲這真的是你的問題。你能更詳細地描述你的頁面在做什麼嗎?

0
if ($('.scroll').jScrollPane()){ 
    $('.scroll').jScrollPane(); 
} 

這個錯誤概率僅僅因爲一個插件加載失敗

+1

除非這種插件是以非常規方式開發的,否則代碼將始終返回一個jQuery對象給if()(即使沒有' .scroll'元素)。因此,它總是會評估爲「真實」。 – user113716 2011-01-05 22:14:02

0

正如其他人所說,這個錯誤是jScroll的錯誤。如果因爲一個元素不存在,jQuery將返回一個空數組。

它是因爲插件未加載。 jScroll是更改滾動條的插件,是否正確?我遇到過很多問題。我建議把它包裝在一個

$(window).load(function(){ 
    //Call it here 
}) 

這解決了我所有的問題。