2010-12-02 25 views
27

2つの外部.jsファイルがあります。最初の関数には関数が含まれています。 2番目の関数が関数を呼び出します。別の.jsファイルからjavascript関数を呼び出す

file1.js

$(document).ready(function() { 

    function menuHoverStart(element, topshift, thumbchange) { 

     ... function here ... 

    } 

}); 

file2.js

$(document).ready(function() { 

    setTimeout(function() { menuHoverStart("#myDiv", "63px", "myIMG"); },2000); 

}); 

トラブルは、この機能を実行していないことです。 file2.jsは特定の条件に応じて動的に挿入されるため、2つの別々のファイルが必要です。この関数は、file1.jsの最後にsetTimeout ...行を含めると機能します

アイデアはありますか?

+0

「menuHoverStart」はグローバルスコープで宣言されていますか? –

+0

おそらくそうではありません - どうすればそれをやりますか? – Tom

答えて

42

menuHoverStartは、その範囲外(ファイル#1の.ready()コールバック関数で定義されています)からアクセスできないという問題があります。あなたは、グローバルスコープでこの機能が利用できるようにする必要があります(またはグローバルスコープで利用可能な任意のオブジェクトを介して):

function menuHoverStart(element, topshift, thumbchange) { 
    // ... 
} 

$(document).ready(function() { 
    // ... 
}); 

あなたはmenuHoverStart.ready()コールバックで滞在したい場合は、あなたがに機能を追加する必要があります手動(関数式を使用して)グローバルオブジェクト:あなたが関数内menuHoverStart宣言した

$(document).ready(function() { 
    window.menuHoverStart = function (element, topshift, thumbchange) { 
     // ... 
    }; 
    // ... 
}); 
+1

ありがとう、あなたは男です。 – whitesiroi

4

(あなたは準備ができて準備に渡す匿名1)。その範囲はその関数に制限され、その関数の外からはその関数を呼び出すことはできません。

do何かがあるので、準備完了イベントが発生するまでそれを定義するのを延期する必要はないので、匿名関数の外に移動することができます。

言い換えれば、グローバルは回避する価値があるので、ネームスペースを定義して(名前の衝突の危険性を減らす)、その機能をオフにすることをお勧めします。

var MYNAMESPACE = {}; // In the global scope, not in a function 
// The rest can go anywhere though 
MYNAMESPACE.menuHoverStart = function (element, topshift, thumbchange) { 
関連する問題