所以,簡單的問題是,是否可以在每個.js文件中寫入$(document).ready(function()
而不寫jQuery代碼? Js文件包含在內,就像那個<script src="app/jsCode/test.js"></script>
?謝謝。
回答
您只需要在DOM完全加載時才應執行的代碼。即使這樣,你可以使用
快捷
速記:
$(function() {...});
是「包裝」的目的是讓瀏覽器實際創建的所有的DOM元素,這樣,當jQuery選擇隨後評估他們發現的節點他們需要操作。
這意味着不,這是不可能的,除非你願意冒險對你的jQuery不起作用 - 除非你做了一些不依賴於DOM的東西(這不太可能)。
可以縮短包裝上,以
$(function() {
// ...
});
,但並沒有真正改變任何東西。
是的。
您可以使用一箇中央號召.ready()
初始化你需要的代碼:
$().ready(function(){
my_class.init();
my_class2.init();
});
你的類可以在單獨的外部文件。
這是一個改進? – Jon
它只寫入一個文件,調用其餘的代碼。它不是一個真正的改進 - 更直接地回答了這個問題。 – Treffynnon
你可以寫:
$(function(){
// do stuff
});
但是,我不知道你明白這個成語是。這說「當文檔被完全加載並且所有DOM節點都可用時,運行此代碼。」
如果您正在編寫一些不依賴於選擇DOM節點或不需要文檔被完全加載的JS代碼,那麼您通常應該將該代碼放在此代碼塊之外。例如,如果您正在聲明類和對象原型。但是,如果您需要註冊事件處理程序或評估選擇器,最好等到DOM加載完成。
ready處理程序的第一個參數不是事件對象,而是jQuery對象本身。 **看到這裏:** http://jsfiddle.net/jCNZ5/ –
啊,每天都要學點新東西。 –
需要位於$(document).ready()
塊內的唯一Javascript代碼是嘗試立即訪問頁面的DOM的Javascript代碼。如果您有很多其他JavaScript(如實用程序函數,庫等),它們僅由其他Javascript調用,那麼它們不必位於$(document).ready()
塊中,因爲它們在第一次加載時不嘗試訪問DOM 。
在我的應用程序/頁面中,我傾向於從$(document).ready()
塊中調用幾個初始化函數,並將其餘大部分代碼放在任何塊之外,但這對您是否合理取決於您的操作在做什麼以及您的代碼如何組織。
$(document).ready(function() {
initHeader();
initComments();
})
但是,在回答你的問題。實際啓動立即訪問DOM的操作的所有JavaScript必須位於$(document).ready()
塊(或直到DOM準備就緒之前的類似類型的延遲)中。
$(document).ready
呼叫可以儘可能避免。
- 將所有腳本移動到頁面底部,以便完全創建文檔並且腳本能夠訪問整個文檔。
- 您的腳本可以分爲:a。 庫文件,比如jQuery。灣腳本,用於實現當前頁面上的功能。按照依賴順序放置腳本,並將主應用程序腳本放在序列的末尾。所以你的實際應用腳本可以訪問DOM和依賴關係。
- 現在如果需要,將主要腳本包裝到
$(document).ready()
調用中。
通常我會做到這一點,定義一個函數__main__()
,並把那作爲ready
處理器在我的主腳本main.js
的底部。
// Define your functions
function func1() {
// blah blah blah
}
function func2() {
// implement blah blah blah
}
function __main__() {
// do main intializations
func1(); // call func1 to initialize function point 1
func2(); // call func2 to init other stuff
// blah blah blah
}
$(document).ready(__main__);
現在你已經有了一個更簡潔的腳本結構。
- 1. 您可以選擇在$(document).ready()調用中的目標文件嗎?
- 2. 將JavaScript調用放置在$(document).ready(function(){並將它們放置在HTML中嗎?
- 3. google.setOnLoadCallback與jQuery $(document).ready(),可以混合嗎?
- 4. 從Python中調用寫入文件的程序 - 我可以避免IO嗎?
- 5. Javascript:我可以避免關閉嗎?
- 6. jQuery:我需要在$(document).ready()中調用$(「img」)。lazyload()嗎?
- 7. Android可以避免onCreate()被調用嗎?
- 8. 一個頁面可以有兩個#(document).ready()方法嗎?
- 9. 我可以避免使用`asmatrix`嗎?
- 10. DataMapper-我可以避免中間表嗎?
- 11. Android的JavaScript注入,我將如何調用這個函數$(document).ready(function(){...})
- 12. 從$(document).ready之外的函數調用到$(document).ready
- 13. 我還需要$(document).ready(function(){})嗎?
- 14. 在$(document).ready
- 15. 我可以在這個外鍵中避免「冗餘」嗎?
- 16. 我可以避免if-elsif-else在這個ruby函數中嗎?
- 17. 我可以避免或優化此動態調用嗎?
- 18. 我可以避免顯式調用RaisePropertyChanged的依賴屬性嗎?
- 19. PDO:我可以避免bindParam嗎?
- 20. JavaScript:$(document).ready(function(){does not activate
- 21. 我可以在jQuery ready函數中添加javascript嗎?
- 22. 我可以避免使用Grape在Groovy中加載模塊嗎?
- 23. 我可以避免在Seq.iter中使用括號嗎?
- 24. 我可以在我的查詢中避免sql_mode嗎?
- 25. ALAssetLibrary可以在Document文件夾中加載圖像文件嗎?
- 26. 泛型可以避免我傳回一個通用的'Object'嗎?
- 27. $(document).ready()用於從外部JavaScript文件調用函數時的行爲不同
- 28. 一個或多個$(document).ready
- 29. 我可以在每個AJAX循環中放2個數組嗎?
- 30. 可以使用JavaScript寫入文件嗎?
如果您不希望腳本中的代碼立即執行,請不要將其定義爲全局代碼。相反,將它放在一個函數中,然後調用DOM準備好的函數... –
你真的有多少個js文件,正確的答案應該儘可能少的人爲可能。如果你有很多文件,你應該把它們合併起來,還有一個很棒的功能叫做複製和粘貼,這在大多數編輯器和操作系統中都是可用的,或者如果你創建了很多不同的站點,就使用模板文件。 – adeneo