2012-05-26 203 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