1

私のメイン Web ページ (Viewer.aspx) には、このような JavaScript スクリプト タグがあります。

<script language="javascript" type="text/javascript">

function initialize() {
     var map = $find('Map1');           
     map.add_mouseMove(mouseMove);  

 }

</script>

これらのスクリプト タグ内に関数があります。このように別の script タグにある別の関数を呼び出すことは可能ですか?

<script language="javascript" type="text/javascript" src="Resources/JavaScript/proj4js-combined.js">

function mouseMove(sender,eventArgs) {
     var source = new Proj4js.Proj('EPSG:3116');
        var dest = new Proj4js.Proj('WGS84');

        var p = new Proj4js.Point(px, py);
        Proj4js.transform(source, dest, p);    
 }

</script>
4

3 に答える 3

5

はい、これは非常に定期的に行われます。Javascript 関数を他のファイルに入れたり、このように機能するページにプルしたりできるからです。

于 2010-04-20T15:38:49.540 に答える
4

2 番目のスクリプト タグはsrc. .js ファイルの内容が読み込まれて解析されますが、script タグ (mouseMove関数) 内のコードは無視されます。関数と .js ファイルの内容の両方が必要な場合は、それらを 2 つの異なるスクリプト タグに分ける必要があります。

于 2010-04-20T15:44:15.287 に答える
1

あなたのコメントによると、TJ が話していた内容は次のとおりです。2 番目のスクリプト ブロックを次のように変更する必要があります。

<script type="application/javascript" src="Resources/JavaScript/proj4js-combined.js"></script>
<script type="application/javascript">

function mouseMove(sender,eventArgs) {
     var source = new Proj4js.Proj('EPSG:3116');
        var dest = new Proj4js.Proj('WGS84');

        var p = new Proj4js.Point(px, py);
        Proj4js.transform(source, dest, p);    
 }

</script>

...しかし、実際にはインライン コード ブロック (<script>私の回答の 2 番目のタグの内側にあるもの) を外部 Javascript ファイルに移動する必要があります。


編集 1:プログラミングのバックグラウンドは何ですか? それが C# や Java のようなものである場合は、それらについて知っていることを忘れて、まったく別の方法で Javascript にアプローチする必要があります。Javascript はコンパイルされた言語ではなく、解釈された言語です。とりわけ、これは関数が宣言される順序が重要であることを意味します

「関数宣言」とは、次のようなものを意味します。

function myNewFunction()
{
   // anything else here
}

これは、Javascript インタープリターに という新しい関数について伝えます。この関数myNewFunctionの本体は中括弧内にあるもので構成されます。

これは、宣言する前に関数を使用していると私が言っていることの例です。次のコード ブロックを考えてみましょう (たとえば、外部 Javascript ファイル内の他の Javascript から分離して):

function foo() // this line declares the function called "foo"
{

}

function bar() // this line declares the function called "bar"
{
    foo(); // this line invokes the previously declared function called "foo"
}

これは、foo()呼び出す前に宣言されているため、期待どおりに機能します。ただし、(次のように聞こえますが) やろうとしていることは、次のようなものです。

function foo() // this line declares the function called "foo"
{
    bar(); // this line tries to invoke the function called "bar"
           // but it hasn't been declared yet! so it's undefined
}

function bar() // this line declares the function called "bar"
{

}

この 2 番目の Javascript スニペットを実行しても、宣言される前に関数を呼び出しているため、機能しません。*

*脚注: これは実際には当てはまりません。なぜなら、この構文 ( function foo() { ... }) を使用すると、Javascript で特別で魔法のようなことができるからです。私の特定の例は実際には機能しますが、あなたが抱えている問題を示しています。

于 2010-04-20T15:45:57.687 に答える