2011-12-03 41 views
2

所以,簡單的問題是,是否可以在每個.js文件中寫入$(document).ready(function()而不寫jQuery代碼? Js文件包含在內,就像那個<script src="app/jsCode/test.js"></script>?謝謝。

+0

如果您不希望腳本中的代碼立即執行,請不要將其定義爲全局代碼。相反,將它放在一個函數中,然後調用DOM準備好的函數... –

+0

你真的有多少個js文件,正確的答案應該儘可能少的人爲可能。如果你有很多文件,你應該把它們合併起來,還有一個很棒的功能叫做複製和粘貼,這在大多數編輯器和操作系統中都是可用的,或者如果你創建了很多不同的站點,就使用模板文件。 – adeneo

回答

3

您只需要在DOM完全加載時才應執行的代碼。即使這樣,你可以使用 快捷 速記:

$(function() {...}); 
+0

速記,不是快捷方式 – Sylverdrag

+0

好極了,這個看起來好多了。 –

+1

@Sylverdrag對不起,我的編程比我的英語好。 :) – GolezTrol

0

是「包裝」的目的是讓瀏覽器實際創建的所有的DOM元素,這樣,當jQuery選擇隨後評估他們發現的節點他們需要操作。

這意味着不,這是不可能的,除非你願意冒險對你的jQuery不起作用 - 除非你做了一些不依賴於DOM的東西(這不太可能)。

可以縮短包裝上,以

$(function() { 
    // ... 
}); 

,但並沒有真正改變任何東西。

0

是的。

您可以使用一箇中央號召.ready()初始化你需要的代碼:

$().ready(function(){ 
    my_class.init(); 
    my_class2.init(); 
}); 

你的類可以在單獨的外部文件。

+2

這是一個改進? – Jon

+0

它只寫入一個文件,調用其餘的代碼。它不是一個真正的改進 - 更直接地回答了這個問題。 – Treffynnon

0

你可以寫:

$(function(){ 
    // do stuff 
}); 

但是,我不知道你明白這個成語是。這說「當文檔被完全加載並且所有DOM節點都可用時,運行此代碼。」

如果您正在編寫一些不依賴於選擇DOM節點或不需要文檔被完全加載的JS代碼,那麼您通常應該將該代碼放在此代碼塊之外。例如,如果您正在聲明類和對象原型。但是,如果您需要註冊事件處理程序或評估選擇器,最好等到DOM加載完成。

+1

ready處理程序的第一個參數不是事件對象,而是jQuery對象本身。 **看到這裏:** http://jsfiddle.net/jCNZ5/ –

+0

啊,每天都要學點新東西。 –

2

需要位於$(document).ready()塊內的唯一Javascript代碼是嘗試立即訪問頁面的DOM的Javascript代碼。如果您有很多其他JavaScript(如實用程序函數,庫等),它們僅由其他Javascript調用,那麼它們不必位於$(document).ready()塊中,因爲它們在第一次加載時不嘗試訪問DOM 。

在我的應用程序/頁面中,我傾向於從$(document).ready()塊中調用幾個初始化函數,並將其餘大部分代碼放在任何塊之外,但這對您是否合理取決於您的操作在做什麼以及您的代碼如何組織。

$(document).ready(function() { 
    initHeader(); 
    initComments(); 
}) 

但是,在回答你的問題。實際啓動立即訪問DOM的操作的所有JavaScript必須位於$(document).ready()塊(或直到DOM準備就緒之前的類似類型的延遲)中。

2

$(document).ready呼叫可以儘可能避免。

  1. 將所有腳本移動到頁面底部,以便完全創建文檔並且腳本能夠訪問整個文檔。
  2. 您的腳本可以分爲:a。 庫文件,比如jQuery。灣腳本,用於實現當前頁面上的功能。按照依賴順序放置腳本,並將主應用程序腳本放在序列的末尾。所以你的實際應用腳本可以訪問DOM和依賴關係。
  3. 現在如果需要,將主要腳本包裝到$(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__); 

現在你已經有了一個更簡潔的腳本結構。

相關問題