2015-01-26 185 views
0

我相對較新的JavaScript,所以這可能有點微不足道。但我似乎無法找到這個問題的答案。如何在JavaScript內部調用外部函數?

假設我有一個帶有函數的JavaScript文件(bar.js),名爲foo()。我想在腳本標記內調用這個函數(foo)。我希望它能像這樣工作。

<script type="text/javascript" src="bar.js"> 
    foo(); 
</script> 

我不能得到這個工作。我用瀏覽器運行了JavaScript控制檯,它似乎在做什麼......沒有。沒有語法錯誤或任何東西。

我可以運行一個類似的功能,只需點擊按鈕...使用上面的腳本標籤和這個。

<button type="button" onclick="foo();">Click Me</button> 

我可以這樣做,但在實際情況下,我需要將參數傳遞到按鈕單擊時調用的函數。我也無法得到那些認可。我確信這與範圍有關。

我想這是像這樣的方式......

<script type="text/javascript" src="bar.js"> 
    var a = "blah"; 
    var b = "blab"; 
</script> 

.... (some more html) 

<button type="button" onclick="foo(a,b);">Click me </button> 

在這裏,我得到一個是不確定的。這導致我認爲這是一個範圍問題。腳本標籤位於頭部,按鈕位於主體部分。你可以把腳本標籤放在頭部和身體標籤之外來製作全局數據嗎?

感謝您的幫助提前。

我以前從未使用過jsfiddle,並且無法正常工作,所以我只需在此處發佈示例代碼。

<html> 
    <head> 
    <script type="text/javascript" src="bar.js"> 
    </script> 
    <!--From what yall say I should have another script 
     tag here for anything else. Say some variable?--> 
    <script type="text/javascript"> 
     var a = "hello"; 
     var b = "text"; 
    </script> 
    </head> 
    <body> 
    <!--This should work now?--> 
    <button type="button" onclick="foo(b,a)"> 
     Click me 
    </button> 
    </body> 
</html> 

bar.js內容:

function foo(id,string){ 
    document.getElementById(id).innerHTML = string; 
} 

我得到了這個工作。 謝謝大家。

+0

你可以發佈你在jsfiddle中試過的代碼嗎? – Bioto 2015-01-26 21:28:43

+1

相關:[內聯腳本與SRC屬性?](http://stackoverflow.com/questions/1056325/javascript-inline-script-with-src-attribute) – 2015-01-26 21:36:55

回答

2

您需要首先包括含有功能的JavaScript:

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

,然後調用它另一腳本標籤:

<script type="text/javascript"> 
    foo(); 
</script> 

在你的榜樣,你似乎已經混合2個概念放到一個無效的單個腳本標記中:包含一個外部JavaScript文件並在腳本標記的主體中寫入您的代碼。

按照specification

腳本可以SCRIPT元素或 的內容內在外部文件中定義。如果未設置src屬性,則用戶代理必須將元素的內容解釋爲腳本。如果src的URI值爲 ,則用戶代理必須忽略該元素的內容並通過URI檢索該腳本的 。

所以基本上你應該避免這種情況,並有單獨的腳本標記包含外部文件和寫入內聯js。

+0

所以你不能鏈接和調用相同的腳本標記? – 2015-01-26 21:30:55

+1

這並不能解釋爲什麼從按鈕調用它的版本不起作用。 – Quentin 2015-01-26 21:31:07

+1

不,你不能,你應該在2個獨立的腳本標籤中做到這一點。 – 2015-01-26 21:31:21