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>

テスト関数は、headタグ内のこの行に含まれている「testscript.js」内にあります。

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

私が得るエラーは「testFuncが定義されていません」です。

次のような他のjquery関数を呼び出すことができるので、ある種のスコープの問題を想定しています。

alert("I work");

また、他の場所のhtmlのスクリプトタグ内に関数を貼り付けることで、関数を呼び出すことができます。

関数を呼び出すためのさまざまな方法を試しましたが、成功しませんでした。助けていただければ幸いです。

4

2 に答える 2

1

HTML内の他のjqueryコードの前にtestscript.jsを含める必要があります。このような:

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

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

testscript.jsPhoneGapがpageinitイベントを発生させるまでにロードされていて、関数testFuncがグローバルである限り、機能しない理由はありません。

あなたは私たちにあなたを見せていませんtestFuncが、私の推測では、それはグローバルではなく、たとえば次のようなものの中にあります。

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

または単にスコープ関数

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

いずれにせよ、それは別の関数内で宣言されているため、グローバルではなく、その関数に対してローカルです。別のスクリプトファイルから呼び出すには、グローバル名前空間から取得できる必要があります(悲しいことに)。そのための最善の方法は、グローバルにするのではなく、次のように、共有するものをすべて配置するグローバルを1つだけ作成することです。

(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 に答える