2012-05-26 207 views
0

我正在使用Phonegap和JQueryMobile創建一個Web應用程序。我是JavaScript新手,並且遇到問題。從函數內部調用外部函數 - Javascript

我的問題是調用一個名爲「testscript.js」的文件中的函數,該函數名爲testFunc。該testscript.js containts只有這個:

function testFunc() { 
    console.log("Yes I work"); 
} 

在我的html頁面,我有以下代碼:

<script> 
    $('#pageListener').live('pageinit', function(event) 
    { 
    testFunc(); 
    }); 
</script> 

的測試功能中我的「testscript.js」這我包括與此發現線頭內的標籤:

<script src="testscript.js"></script> 

我得到的錯誤是「testFunc沒有定義」。

我假設它的某種類型的範圍問題,因爲我能夠調用其他jQuery的功能,如:

alert("I work"); 

,我能夠在HTML腳本標記內堅持他們打電話給我的功能別處。

我試過各種方式調用我的功能沒有成功,任何幫助表示讚賞!

+0

'testscript.js'看起來像什麼?特別是定義'testFunc'的位? –

+0

我已更新我的問題以顯示testscript.js文件和testFunc的外觀。 – Demonofloom

回答

1

你必須在html的其他jQuery代碼之前包含testscript.js。像這樣:

<script src="testscript.js"></script> 

<script> 
    $('#pageListener').live('pageinit', function(event) 
    { 
     testFunc(); 
    }); 
</script> 
+0

謝謝!這解決了我的問題。然而,我不清楚爲什麼我需要包括,當它已經包含在我正在使用的其他JavaScript庫(jquery,jquery-mobile等)頭標籤之間。你可以解釋嗎? – Demonofloom

+0

@Demonofloom:正如我在我的回答中所說的,只要在PhoneGap調用你的'pageinit'處理函數的時候加載了'testscript.js',它就可以工作。如果它在你移動你的'testscript.js'時開始工作,這意味着當PhoneGap激發你的處理程序時它*沒有被加載 - 例如,你的腳本鏈接在頁面上太低了。 –

+0

是。 T.J.正確提到它。只有當函數被調用時,腳本才加載。 – gopi1410

1

只要testscript.js已被觸發的PhoneGap的pageinit事件時加載的,並提供了testFunc功能是一個全球性的,沒有理由不應該工作。

你還沒有告訴我們您的testFunc,但我的猜測是,它不是一個全球性的,而是你擁有了它裏面的東西一樣,例如:

$('#pageListener').live('pageinit', function(event) 
{ 
    function testFunc() 
    { 
     // Do something here 
    } 
}); 

或只是一個範圍功能

(function() 
{ 
    function testFunc() 
    { 
     // Do something here 
    } 
})(); 

無論哪種方式,由於它是在另一個函數中聲明的,它是本地函數,而不是全局函數。要從另一個腳本文件中調用它,您需要能夠從全局命名空間中獲取它(可悲)。要做到這一點,最好的辦法是不使它成爲一個全球性的,但只創建一個全球,你會把所有的共享上的東西,像這樣:

(function() 
{ 
    if (!window.MyStuff) 
    { 
     window.MyStuff = {}; 
    } 
    window.MyStuff.testFunc = testFunc; 

    function testFunc() 
    { 
     // Do something here 
    } 
})(); 

...這你的電話是這樣的:

$('#pageListener').live('pageinit', function(event) 
{ 
    MyStuff.testFunc(); // Or: window.MyStuff.testFunc(); 
}); 
+0

我認爲我的testFunc是全局的。我編輯了我的原始問題以顯示testscript.js的外觀。 – Demonofloom