2010-01-09 113 views
5

我有一個asp.net mvc應用程序,我正在嘗試將所有的javascript移出到js文件中。現在我有一個叫做sharedfunctions.js的地方。我可以從另一個調用一個js文件嗎?

問題是,如果我將一些代碼移動到調用sharedfunctions.js文件中的方法的js文件中,它似乎不再有效。

什麼是能夠將js文件中的通用代碼分解出來並允許它們實際正常工作的最佳方式?

+0

重複:http://stackoverflow.com/questions/21294/how-do-you-dynamically-load-a-ja vascript-file-think-cs-include和http://stackoverflow.com/questions/1899494/an-other-way-to-load-a-js-file-in-js-code。並添加我自己的鏈接http://codepaste.net/o6gq2n – ram 2010-01-09 18:34:53

回答

5

只要所有的.js文件在頁面上的inquestion引用,函數/在所有變量他們將可以訪問任何其他一旦頁面加載

我正在強調最後一點,因爲它可能是您問題的根本原因。這可能是.js文件加載的順序錯誤。

如果您有一些javascript立即執行(例如,它不是由頁面事件觸發的),那麼它可能會在您的sharedfunctions.js文件包含在頁面中之前開始執行。在這種情況下,sharedfunctions.js中的函數實際上在其他JavaScript執行時不會存在。

看看你是否可以看看事情的順序來消除這些問題。例如,請嘗試並確保將您的sharedfunctions.js加載爲頁面上的第一個腳本文件。

恕我直言,這比試圖破解你現有的js文件直接加載其他js文件的內容更可取。

-1

使用此模式:

function IncludeJavaScript(jsFile) 
{ 
    document.write('<script type="text/javascript" src="' + jsFile + '"></scr' + 'ipt>'); 
} 
+1

它可以摧毀整個文件,如果寫在錯誤的地方。 – 2010-01-09 17:20:09

+0

雖然它確實允許一個文件包含另一個文件,但由文件本身管理文件間依賴關係確實是非常糟糕的做法。此外,在包含函數調用的文件完全加載之前,「包含」文件仍然不會被Javascript解釋器解析 - 在這種情況下,它不會有效地導入任何可以由文件中的其他代碼使用的JavaScript代碼進口。 – 2010-01-09 17:38:41

1

是你認爲你有假冒的覆蓋你的函數問題?如果在定義函數之前就是這種情況,您可以檢查是否已經定義了它。

如果(typeof運算yourFunctionName ==「功能」)

0

最好的方法是將它全部放在一個文件中,並在您的開發環境中,將其分解爲每個文件類或您使用的任何方法,只需將它們按正確的順序包含在內。

如果要動態包括JS(使用哞工具捷徑,雖然你可以簡單地使用他們的資產庫)

$$('head')[0].adopt(new Element('script',{'type':'text/javascript','src':'path to js file'})); 
0

某些庫解決方案

Dojo:dojo.require("my.package.name");

jQuery:$.getScript("url/to/script.js", function() { /* callback */ });

相關問題