从函数内部调用外部函数 - Javascript

时间:2012-05-26 12:02:46

标签: javascript jquery jquery-mobile cordova

我正在使用Phonegap和JQueryMobile来创建Web应用程序。我是javascript的新手,我遇到了问题。

我的问题是在一个名为“testscript.js”的文件中调用一个函数,该函数名为testFunc。 testscript.js只包含这个:

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

在我的html页面中,我有以下代码:

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

测试功能在我的“testscript.js”中找到,我在head标签中包含了这一行:

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

我得到的错误是“未定义testFunc”。

我假设它有某种类型的范围问题,因为我可以调用其他jquery函数,例如:

alert("I work");

我可以通过将它们粘贴在其他地方的html中的脚本标记中来调用我的函数。

我尝试过各种方式调用我的功能但没有成功,感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

只要在PhoneGap触发testscript.js事件时加载pageinit,并且testFunc函数是全局函数,就没有理由不起作用。< / p>

你没有向我们展示你的testFunc,但我的猜测是它不是一个全球性的,而是你的内容,例如:

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

或只是范围界定功能

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

无论哪种方式,因为它在另一个函数中声明,它是该函数的本地函数,而不是全局函数。要从另一个脚本文件中调用它,您需要能够从全局命名空间中获取它(遗憾的是)。最好的方法是使其成为全球性的,但要创建一个一个全局,您将把所有共享内容放在上面,如下所示:< / p>

(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();
});

答案 1 :(得分:1)

您必须在html中的其他jquery代码之前包含testscript.js。像这样:

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

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