2012-02-19 12 views
4

私が作成したいくつかのJQuery関数を持つ.jsドキュメントをロードするドキュメントを作成しました。 Firebugコンソールを使用して、htmlドキュメント上でこれらの関数の機能をすばやくテストしたいと考えています。しかし、これらの機能をコンソールで試してみると、私は何の反応も得られません。例えばfirebugコンソールからカスタム関数を呼び出す

<script src="jquery.js" type"text/javascript"></script> 
<script src="myfunctions.js" type="text/javascript"></script> 
  • Myfuntions.jsは、次のそれに定義されています:

    function showAbout(){ 
        $('div#about').show("slow"); 
        $('.navbar #about-button').attr('disabled', true); 
    } 
    
    • 私は私のJSを呼び出すのindex.htmlを持っています

      問題:

      showAboutまたはをコンソールからindex.htmlに接続しようとすると、私は何も変更しません。しかし、$('div#about').show("slow");または$('div#about').show("slow");をコンソールから直接呼び出すと、予想どおりの動作が得られます。
      コンソールからユーザー定義関数を呼び出す適切な方法は何ですか?

    答えて

    22

    showAboutがグローバルスコープで定義されている場合は、showAbout();をコンソールに書き込んで結果を確認することができます。そうでない場合、あなたはおそらくそのようスコープ機能であなたの関数を入れている:

    (function() { 
        function showAbout() { 
        } 
    })(); 
    

    もしそうなら、あなたのために良いは、あなたがグローバル変数/関数を作成避けてきました。しかし、コンソールはグローバルスコープにしかアクセスできないため、コンソールからこれらの機能にアクセスすることはできません。

    あなたは(デバッグのために、一時的にだけ多分)コンソールからそれらを使用できるように、これらのいずれかをエクスポートしたい場合は、このようなことを行うことができます:明示的にshowAboutプロパティを置く

    (function() { 
        window.showAbout = showAbout; 
        function showAbout() { 
        } 
    })(); 
    

    をあなたの関数を参照するグローバルオブジェクト(window)。コンソールのshowAbout();が機能します。

    +4

    あなたはちょっと気分がいいよ –

    +0

    なぜこの関数を括弧で囲んで、別の括弧で囲む必要がありますか? **(** 関数(){ ...} **)()**; – Ricalsin

    +0

    @Ricalsin:括弧自体は必須ではありませんが、関数*宣言*ではなく関数*式*を扱っていることをパーサーが理解できるようにする必要があるため、* something *最後に '()'をつけることで関数式をすぐに呼び出せますが、関数*宣言*をそのように呼び出すことはできません。さらに[その他の質問](http://stackoverflow.com/q/13341698/157247)と私の答えです。 :-) –

    2

    は、おそらくグローバルスコープにはありません。

    $(document).ready()コードで囲むことができ、その範囲はその機能に限定されます。

    テストのために、あなたは、関数が定義されていたら、あなたは、その後、あなたのコンソールからを呼び出すことができます...の下

    window.showAbout = showAbout; 
    

    を追加することができます。

    関連する問題