2012-11-03 35 views
0

我幾乎說明了我不得不問的。但是將所有的外部.js文件,並把它們之前關閉您的母版頁上的正文標記沒關係在asp.net網站上?在asp.net網站上關閉body標記好嗎?

我只是要說明yslow和google的速度已經顯示出來。我無法合併這些javascript,因此我試圖在頁面加載後加載它們「」,但這樣做會使它們無用; 我的一些jQuery的東西不起作用

我將我的.js文件移動到首字體標籤上方,並且它們工作正常。我究竟做錯了什麼?我能做些什麼來加載我的.js文件頁面加載後?感謝任何人都可以提供的建議!

+1

你有沒有理由不把它們放在腦袋裏?你需要把它們放在你需要它們之前。如果你的身體中間或頭部有jQuery/Javascript代碼,那麼你不能僅僅包含外部文件。 HTML從上到下被解析,所以你的Javascript一旦被讀取就會被執行。 – Ian

+1

這真的取決於這些文件的內容。如果它們是一系列效用函數,直到晚些時候纔會被調用,那麼通過一切手段,將它們放在主體的末尾。但是,如果您的頭部/正文內嵌代碼直接調用外部文件中的某些內容,則需要將該文件放在內聯代碼之前。你總是可以用某種方式重構你的代碼,但這只是它的方式。 – Ian

+0

謝謝@Ian!我想我已經開始學習一些關於Javascript的知識......感謝您的意見和其他人的意見。我感謝您花時間回覆! –

回答

2

「是否將asp.net網站上的關閉正文標記放好之前的JavaScript?」

簡答題。是。

長的答案。這取決於JavaScript。頁面加載後

有些事情可能不那麼有效,因爲,正如所寫的,他們只是需要在domready中或之前加載某些資源,以及隨後的邏輯或許可以在數。也就是說,如果你有任何在DOMReady上添加圖像的jQuery,然後需要處理這些圖像,獲取它們的高度或其他值,那麼可能會有一些代碼在頁面加載(圖像加載後)時運行。如果頁面有已加載,則此策略不起作用。 onload不會發生兩次,IIRC。

是否必須這樣寫?不,編寫一些只在每個圖像(或任何其他資源)已被驗證爲已加載後運行的代碼可能會更好,如果您有正確的代碼片段,這通常很容易,但它不是無關緊要。

「我在做什麼錯了?我可以在頁面加載後加載我的.js文件嗎?」

有很多方法可以做到「錯誤」,我敢打賭,大概可以寫出所有類型檢查的整個章節,但仍不能涵蓋所有情況。我並不是說這樣做會阻止你嘗試重寫,以便在頁面加載後加載它們,因爲我認爲覆蓋範例很容易 - 我只是不相信自己能夠準確地列出最常見的我的頭頂上的案件。

+0

哇,@JayC,你給了我很多想法......我想我必須做更多的研究,併成爲受過教育的人(和其他人一樣)......你是對的......一些jquery的東西在根文件夾上完美工作,然後當你進入子文件夾(例如,ussvision.com,然後ussvision.com/services/,然後ussvision.com/services/cognex ...並且即使如此,ussvision.com /services/cognex/more/cognex.aspx ...即使我將額外的../添加到每個.js文件中,它也會令人困惑。嘿,我真的很感謝你在閱讀和回答我的問題的時間!一堆! –

1

這是可以的,通常被認爲是最好的做法,把你的js文件放在關閉body標籤之前,即使在asp.net網站。雖然它可以讓主頁面變得有點惱人/棘手/混亂。

另一方面,你只需要引用jquery(或其他)一次,然後設置好。但是,如果你在你的body的控件/部分中使用javascript/jquery,它將在你的母版頁上的文件被加載之前執行。

這裏有一些事情可以做,以打擊這些競態條件...

您的包裹中的JavaScript window.onload = function() { /*your code*/ }。這將等待頁面在被調用之前完成加載(圖像,外部文件等)。

我的選擇(在asp.net MVC上工作)是使用RenderSection()Details here。 Webforms中可能有相同的內容,也許有人可以在那裏發出響亮的聲音。

+1

好的建議......除非沒有好的理由在*可重複使用的JavaScript文件中使用'window.onload = function(){/ *您的代碼* /} .',特別是在使用jQuery並且jQuery提供了你通過'$(window).load(function(){/ * your code * /})添加多個事件處理程序的常用方法是''。 – JayC

+1

你是對的,我可以h更清晰了。我想象的用例是在控件/部分(包裝在腳本標籤中)內部有js代碼。在這種情況下,jquery甚至不會被加載,'$'將不被定義。我希望永遠不要把它放在一個外部的,可重用的文件:) – brains911

+0

感謝您的信息,@ brains911!我到了那裏...還沒有,但我只想在加載頁面時儘量減少http請求的數量。感謝您的建議,並已將您的鏈接添加到我的最愛中......謝謝! –

1

正如他們在評論中所述,JavaScript從上到下加載。因此,如果在您的身體中調用您在您的腳本中定義的函數,而這些函數稍後會加載,則可能會出現錯誤。 你可能想要做的是將這些腳本(身體中間的那些腳本)移動到它自己的文件中,並用文檔準備好的後衛包圍它們。

$(document).ready(function() { 
    //Your code in here 
}); 

這將保證代碼在文檔dom準備就緒後執行。 還要確保在您的庫和依賴關係之後添加此文檔。

這也將使您的JavaScript更易於維護。

+1

我相信,如果jquery也處於頁面底部doc準備就緒將失敗,因爲'$'將不確定。 – brains911

+1

是的,你是對的。這就是爲什麼我提到要在庫之前添加這個文檔。 – theprogrammer

+1

對不起,我錯過了。我的錯。 – brains911

相關問題