2016-08-16 15 views
0

1つのjsファイルにある関数を呼び出すことは可能ですか?また、別のjsファイルでiifeパターンを使用して関数を公開することはできますか?例えば が、これはいくつかのvalidationScript.jsファイルです:iifeパターンを使用しているときに別のjsファイルから関数を呼び出しますか?

var ValidationNamespace = function() 
{ 
    var nameValidation = ""; 
    var testValidation = ""; 

    return{ 
     validateIfNameAlreadyExistsInTable : function(currentNameValues) 
     { 
      for(var i=0; i < currentNameValues.length ; i++) 
      { 
       if(document.getElementById("tbName").value == currentNameValues[i]) 
       { 
        var nameVal = "Name already exists in table!"; 
        document.getElementById("nameVal").innerHTML = nameVal; 
        return false; 
       } 
      } 
      document.getElementById("nameVal").innerHTML = ""; 
      return true; 
     } 
    }; 
}(); 

そして、私は別のファイルを持っている、と言うことができますscript.js

機能いくつかのscript.js機能からvalidateIfNameAlreadyExistsInTableを呼び出すためにいくつかの方法がありますか?

問題は、私はそれを呼び出すようにしようとすると、それは未定義であるということです。

enter image description here

私はindex.htmlを持っている私はこのようなの.jsファイルの両方を参照しています。ここで

<script type="text/javascript" src="script.js"></script> 
<script type="text/javascript" src="validationScript.js"></script> 
+0

'ValidationNamespace'が' object'を返しています..使用 'ValidationNamespace.validateIfNameAlreadyExistsInTable' – Rayon

答えて

1

はい、IIFEが関数を公開するオブジェクトを返すため、ファイルはValidationNamespaceというオブジェクトを保存します。varはグローバルに、したがってグローバル変数として宣言されています。

だから:

あなたの編集再
ValidationNamespace.validateIfNameAlreadyExistsInTable(theName); 

、あなたはおそらく、他の順序で最初のvalidationScript.jsが、その後script.jsスクリプトをロードしたい:

<script type="text/javascript" src="validationScript.js"></script> 
<script type="text/javascript" src="script.js"></script> 

スクリプトがロードされ、順番に実行しますそれらを与えてください(asyncまたはdeferを使用しない限り)。したがって、script.jsのコードが他のイベントを待っていない場合は、validationScript.jsが読み込まれる前に実行されます。

+0

回答ありがとうございます私は私と私は1つのエラー、ValidationNamespaceが存在しないと言っています。私は追加情報で質問を更新します。 @ T.J.Crowder –

+0

@ nemo_87:他のスクリプトがロードされた後で*これを行う必要があります。それ以外は、何かが後でその変数(またはプロパティ)に別の値を割り当てない限り、動作することが保証されています。 –

+0

だから、私は最初にvalidationScriptとscript.jsをロードしなければなりません。意味がある!ありがとう:) @ T.J.Crowder –

0

これはうまくいくと思います。 ValidationNamespace()。validateIfNameAlreadyExistsInTable(theName);

+0

'ValidationNamespace'は関数ではないので、呼び出す際にエラーが発生します。 –

関連する問題