2011-07-12 13 views
0

誰かが下記の(簡略化した)コードで私を助けてくれますか?私はdoTheSlide()関数をスライドイベント関数内から呼び出そうとしています。私はまだJSの範囲の私の理解の上に少し日よろしいです。JavaScriptスコープで失われた

これを達成する正しい方法は何ですか?私はこのエラーを取得しています:

Uncaught TypeError: object is not a function

(function($) { 

    bindEvent = function(slider) { 

     slider.bind('slide', function(event, ui) { 

      doTheSlide(ui.value); 
     }); 
    } 

    doTheSlide = function(value) { 
     //Animate the slide 
    } 


    var methods 


})(jQuery); 
+0

は、あなたがそれらのアノン機能を保持する変数のからで 'var'を入れて試してみましたか? –

答えて

5

あなたは 'doTheSlide' どこかを宣言する必要があります。あなたはグローバル関数としてそれを使用しているようですが、これはほとんどの場合間違っています。すべてが正しく宣言されていることを確認してください(varまたは名前付き関数を使用)。ここで

はあなたのコードの修正バージョン(私はそれを好む方法)です:

(function($) { 
    function doTheSlide(value) { 
     //Animate the slide 
    } 

    function bindEvent(slider) { 
     slider.bind('slide', function(event, ui) { 
      doTheSlide(ui.value); 
     }); 
    } 
})(jQuery); 

は、それらが使用される前に関数を宣言することを忘れないでください。後で宣言された関数を呼び出すことはできますが、それは良いスタイルではありません。

代替構文:

(function($) { 
    var doTheSlide = function(value) { 
     //Animate the slide 
    }; 

    var bindEvent = function(slider) { 
     slider.bind('slide', function(event, ui) { 
      doTheSlide(ui.value); 
     }); 
    }; 
})(jQuery); 
+0

+1は関数式の前に関数宣言を提案するためのもので、構文がはっきりしていて、 "吊り上げ"を利用しています。 – RobG

関連する問題