6

Javaバックエンドが連結して同じレンダリングされたHTMLページに送り返す2つの異なるJSPがあります。

各JSPには独自の<script>ブロックがあり、そのブロック内に関数を定義します。

JSP#1:

<script type="text/javascript">
    function blah() { ... }
</script>

JSP#2

<script type="text/javascript">
    function foo()
    {
        blah();
    }
</script>

私が言ったように、バックエンドはこれらをHTTP応答に追加し、同じリクエスト中にブラウザーに送り返します。

このページをブラウザで実行すると、が呼び出されblah()たときに実行されていないことがすぐにわかります。foo()Firebugにコンソールエラーが表示され、blah()定義されていませんblah()独自のタグ内にスコープしかないのではないかと思います。<script>同様にfoo()それはここに当てはまりますか、それとも何か他の問題がありますか?

ページソースを表示すると、両方のスクリプトブロックと両方の関数が表示されます。これは、すべてがサーバー側で正しく生成/レンダリングされていることを示していますが、おそらく私のアプローチは本質的に間違っています(異なるスクリプトタグ内の関数を定義する)。前もって感謝します。

4

3 に答える 3

5

それらはすべてグローバルです。彼らはお互いを見ることができます。問題は、それらが定義され、相互に呼び出すときです。

これらを次の順序で定義して呼び出す必要があります。

  1. バー
  2. foo
  3. fooを呼び出す
    • fooが実行され、barが呼び出されます
    • バーが実行されます
于 2012-04-23T23:21:16.640 に答える
1

次のように関数を呼び出すことができます。

  (function($) {

     var namespace;
         namespace = {
                     something : function() {
                                             alert('hello there!');
                                            },
                      bodyInfo : function() {
                                             alert($('body').attr('id'));
                                            }
                     };
         window.ns = namespace;
    })(this.jQuery);

   $(function() {
              ns.something();
              ns.bodyInfo();
   });
于 2013-08-02T07:52:47.293 に答える
0

JavaScriptでスコープを定義するのは関数だけなので、問題はスコープの問題ではありません。ほとんどの場合、foo()を呼び出していないか、blah()が定義される前に呼び出しているか、どこかに構文エラーがあります。HTMLページ全体を投稿して、何が起こっているのかを確認できるかもしれません。

于 2012-04-23T23:22:19.110 に答える