0

我正在使用 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”中找到,我将这一行包含在头标签中:

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

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

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

alert("I work");

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

我已经尝试了各种方法来调用我的函数,但都没有成功,感谢您的帮助!

4

2 回答 2

1

只要在PhoneGap 触发事件testscript.js时已加载,并且该函数是全局的,就没有理由不工作。pageinittestFunc

您没有向我们展示您的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();
});
于 2012-05-26T12:08:22.610 回答
1

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

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

<script>
   $('#pageListener').live('pageinit', function(event) 
   {
      testFunc();
   });
</script>
于 2012-05-26T12:23:47.390 回答