2011-01-05 8 views
2

サードパーティのプラグインを使用する場合は、通常、メインのapplication.jsファイルで初期化します。jQuery:if文を使用して「未定義」エラーを取り除くにはどうすればよいですか

例:scrollクラスを持っていないページが読み込まが、その後、私が取得する場合、問題がある

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

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

ので、これを回避するために、私はそれを包みます:

これは問題を解決しますが、ちょうどハックのようです。

これを解決する「正しい」方法はありますか?あなたがtry/catchブロックを使用することができます

+2

このエラーは、要素が存在しないのではなく、関数 'jScrollPane'が存在しないと言います。一般に、jQueryの長さ0の配列は問題を起こさない。 –

答えて

2

あなたが取得している場合:

ScrollPane' [undefined] is not a function. 

をページが.scroll要素を持っていないので...それはないだろう。

プラグイン(またはjQuery自体)がロードされていないと、そのようなエラーが発生します。

あなたがそのプラグインを持っていないそのうちのいくつかは、いくつかのページ、上のいくつかのコードを再利用している場合は、代わりに次の操作を行います。

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

これは、特定のページにこのプラグインを含めるべきかどうかわからない場合、これは完璧な解決策ですが、ページ上にあることを期待している場合は、そのプラグインをjQueryスクリプトタグそれが正しくリンクされていることを確認してください。それ以外の場合は、私の例も見てください。 –

+0

@Oscar:ええ、私はそれが問題だと仮定しています。あなたはこのプラグインでより多くの経験があるように思えます。 – user113716

+1

そんなに厄介で厄介なプラグインです。) –

0

...

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

うう...ありません。 jQueryはそのようには機能しません。 $("any selector")への呼び出しは、になります。いつもはすぐに使える(しかし空の)jQueryオブジェクトを返します。私はそれが本当にあなたの問題だとは思わない。あなたのページが何をしているかについてもっと詳しく説明できますか?

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

このエラーは、アドオンが

をロードできなかったという理由だけでPROBです
+1

このプラグインが非従来の方法で開発されない限り、コードは常にjQueryオブジェクトを 'if()'に返します(たとえ ' .scroll'要素)。したがって、常に「真」と評価されます。 – user113716

0

他の人が言っているように、そのエラーはjScrollのエラーです。要素が存在しないため、jQueryは空の配列を返します。

これは、プラグインがロードされていないためです。 jScrollは、スクロールバーを変更するプラグインです、正しいですか?私はそれに多くの問題がありました。

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

これは、すべての問題を修正しました。

関連する問題