2009-07-07 17 views
0

別のjsソースファイル内の関数を呼び出す際に問題があります。別のjsソースファイルから関数を呼び出すときの定義されていないエラー

私は、その特定のファイルを呼び出す関数の前にソースファイルを宣言しました。 関数です。 これはうまくいくと思いましたが、定義されていないエラーが発生します。

私はまた、後に宣言されたソースファイル内の関数を呼び出す関数をファイル内に持っています。 これは、同じファイルに関係しますが、それ以外の点では問題になります。

関数は、ドキュメント準備文(関数)の間で宣言されます。

未定義のエラーを回避する方法はありますか?

これは私がそれを設定する方法である:

<script type="text/javascript" src="includes/livetabs.js"></script> 
<script type="text/javascript" src="includes/chat.js"></script> 


//this is in the chat.js file 
$(document).ready(function(){ 

function chatWith(chatuser) { 
    check=iscookieUsername(); 
    if (!check){ 
      chatusersuspended=chatuser; 
      showchatinlogform(); 
    } 
    createChatBox(chatuser); 
    $("#chatbox_"+chatuser+" .chatboxtextarea").focus(); 
} 


}); 

//this is in the livetabs.js file 
$(document).ready(function(){ 

function iscookieUsername(){ 
     if (!tbusername){ 

      return false; 
     } 
     if (issessionusername){//flag if session has already been set 

      return true; 
     } 
     $.ajax({ 
      url: "includes/livetabs.php", 
      data: ({username: tbusername, action: "setsessionusername"}), 
      cache: false, 
      type: "POST", 
      dataType: "json", 
      success: function(data) { 
      //store username in php session 
      //some personal user preferences returned 
      usernamecookie=data.cookie; 
      trackuser=data.track; 
      issessionusername=1; 
     }}); 

     return true; 
    } 

}); 

おかげで、リチャード

+0

HTML/JSソースコードを投稿できますか? –

+0

OK、ちょっと待ってください。十分でない場合は、@ SOLUTION YOGIのように – Richard

答えて

2

それはあなたの最初のソースファイル、呼び出したい関数を含む1は、その構文エラーを持っている可能性が高いです機能が使用できないようにします。

また、ファイルのロード順序も関係なく、この機能は利用可能です。例:

function foo() { alert('foo!'); } 
foo(); 
bar(); 
function bar() { alert('bar!'); } 

編集:SolutionYogiは正しい答えを予測したように見えます。しかし、参考のために、私は私のままにしておきます。

+0

というサイトへのリンクを提供します。これは、関数を囲むドキュメントレディメソッドによって引き起こされた可能性があります。まずそれをチェックしなければならないでしょう。 – Richard

+0

これは私の場合でした:1時間の調査を閉じました! – Vale

7

関数を$(document).readyメソッド呼び出しの中で定義した場合、その関数は外部からは見えません。それらをreadyメソッド呼び出しの外で定義しようとします。

$(document).ready(
    function() 
    { 
     var test = function() { alert('test'); }; 

     test(); //It will work here. 

     anotherTest(); //This will also work. 

    } 

); 

function anotherTest() { alert('anotherTest'); }; 

test(); //You can't call test function here because test is defined inside the anonymous function passed to the 'ready' method. 

anotherTest(); // Alerts 'anotherTest'. 

これはコードの配置方法でない場合は、問題が特定できるようにソースコードを投稿してください。

+0

ありがとう、私は私の元の質問を編集しました。あなたが示唆したように。私はそれらを文書準備メソッドから外さなければなりません。それはそれだろう。 – Richard

+0

Richard、 'iscookieUsername'と 'chatWith'関数をドキュメントの外に置いてください。 document.readyは、Webページがロードされたときに実行するコードを置く場所です。そこに関数を定義するわけではありません。いくつかのjQueryチュートリアルを読んで、もっと理解してみてください。 – SolutionYogi

+0

はい、ありがとう、少なくとも今私は今それも – Richard

0

特定のページを参照する前に、Google Chromeを使用してF12キーを押して開発者ツールを表示してください。 ネットワークでは、どのファイルがロードされているのかを見ることができます。 。 (あなたもスクリプトにフィルタをかけることができます)、それが一番上にあり、呼び出しスクリプトは後で読み込まなければなりません。読み込まれていない場合は、以前のページにそのファイルを含めてください。それが問題を解決することを願っています。

関連する問題