2016-09-02 4 views
1

私は同じ名前の2つのファイルdata.phpとdata.jsを持つプロジェクトを持っています。私はlist.jsからプロジェクト内の別のファイルであるdata.jsで関数を実行しようとしています。別のJavaScriptファイルからeval()を使わずに関数を呼び出す

以下のコードは、私が試した3つの異なる試みを示しています。最初は、data.php内のconditionTemplateの関数がないというエラーをスローします。他の2つはエラーをスローするUncaught TypeError:未定義のプロパティ 'condtionTemplate'を読み取ることができません。

list.js

if (this.filter == "correct") { 
    window["condtionTemplate"](true); 
    window["data"]["condtionTemplate"](true); 
    window["data.js"]["condtionTemplate"](true); 
} 

これは私が内部data.jsに

data.js

list = new listFiler(); 
list.prototype.condtionTemplate = function(status) { 
    if (status) { 
     main_buttons.enabled("next", false); 
    } else { 
     main_buttons.enabled("back", true); 
    } 
} 

data.phpを取得しようとしています機能です

<body>  
    <script src="javascript/list.js?1" type="text/javascript"></script> 
    <script src="javascript/data.js?1" type="text/javascript"></script> 
</body> 
+0

data.jsのどこかにロードしますか? –

+0

'list'とは何ですか?ファイルではなくタイプ。 – Thomas

+0

@thomasが質問を更新しました。 'listFilter'は最初のコードブロックが – Bish25

答えて

1

まず

<script src="javascript/data.js?1" type="text/javascript"></script> 
<script src="javascript/list.js?1" type="text/javascript"></script> 

にロード順序を変更する機能listFilerにプロトタイプを追加します。

listFiler.prototype.condtionTemplate = function(status) { 
    if (status) { 
     main_buttons.enabled("next", false); 
    } else { 
     main_buttons.enabled("back", true); 
    } 
}; 

インスタンスにcondtionTemplateと

var list = new listFiler(); 

を使用してください。

if (this.filter == "correct") { 
    list.condtionTemplate(true); 
} 
+1

私は上のことを複雑にしようとしていたと思います。 – Bish25

0

HTML:

<script src="data.js" /> 
<script src="list.js" /> 
<script> 
    condtionTemplate() ... 
</script> 
+0

答えをありがとう。ただし、このシナリオでは機能しません。私はlist.jsファイルからconditionTemplateを実行する必要があります。 – Bish25

+0

それを行う方法はありません、申し訳ありません。 –

+0

私はeval()を使用すると動作しますが、これは良い練習ではありません。 – Bish25

関連する問題