2012-04-23 66 views
6

我有兩個不同的JSP,Java後端連接在一起併發送回相同的呈現HTML頁面。腳本標記之間的JavaScript函數範圍

每個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()也是如此。 這裏是這種情況,還是別的什麼錯誤?

當我去查看頁面源時,我看到兩個腳本塊和兩個函數。這告訴我一切正在生成/呈現正確的服務器端,但也許我的做法本質上是錯誤的(定義不同的腳本標籤內的功能)。提前致謝。

+2

時或你怎麼調用foo()? – Philipp 2012-04-23 23:18:51

+0

當用戶將鼠標懸停在元素上時調用foo()。我可以通過用alert(「」)語句替換它的內容來驗證它是否被調用。 – IAmYourFaja 2012-04-23 23:37:23

回答

5

所有這些都是全球性的。他們可以看到對方。問題在於何時被定義並相互呼叫。

你應該定義,並呼籲他們在這個順序:

  1. 調用了foo
    • foo的執行,並呼籲巴
    • 執行
+0

那麼,foo()是在頁面標題內定義的,bar()是在頁腳內部定義的。因此,foo()在結果HTML中比bar()顯示「更高」(行號明智)。是否有可能,因爲這些都是在頁面加載時定義的,因爲foo()首先被定義,bar()不存在?在這種情況下,我如何強制bar()首先被定義(或者更好的是,在頁面加載期間已經定義bar()之前,foo()不會被調用)!!? – IAmYourFaja 2012-04-23 23:30:47

+0

啊,這是一個訂購問題。我把bar()放在foo()的定義頭上,一切都很好。感謝約瑟夫! – IAmYourFaja 2012-04-23 23:52:23

0

JavaScript中唯一定義範圍的函數是一個函數,所以你的問題不是範圍問題。你最可能不會調用foo(),你在blah()被定義之前調用它,或者你在某個地方有語法錯誤。也許你可以發佈你的整個HTML頁面,以便我們可以看到發生了什麼。

+0

我很欣賞你的輸入,但實際的HTML是巨大的,並且要求這個非SSCCE甚至可以被問及。請在@ Joseph的回答下看到我的評論,因爲我認爲他在正確的軌道上。再次感謝您的所有幫助。 – IAmYourFaja 2012-04-23 23:33:03

+0

我明白。我在我的回答中也提到了他的答案。很高興聽到你運行 – koenpeters 2012-04-25 15:23:42

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(); 
    });