2010-11-16 45 views
2

application.js有這個在外面?

$(function() { 
    // My functions are in here, and some of them even work. 
} 

我剪切和粘貼,直到我得到了一些工作。?,我現在正在學習jQuery的認真有點落後,我知道

什麼是上面代碼的目的,$(function() { }

回答

7

這是一個shortcut for

$(document).ready(function() { 

}); 

這意味着一旦DOM完全加載,腳本就會運行。這意味着腳本中依賴某些DOM節點的任何部分都可以工作。如果你的頁面頂部有你的.js文件,它會在DOM節點存在之前執行,這意味着你會嘗試使用那些不存在的東西。 $(document).ready()允許您推遲執行代碼,直到頁面準備就緒。

因此,舉例來說,假設你有以下的JavaScript,裝在頭部的腳本標籤:

$('a').click(function() { 
    alert("You can't leave!!!"); 
    return false; 
}); 

,試圖點擊處理程序添加到所有<a>標籤,但目前還沒有任何<a>標籤,所以它不會做任何事情。如果您在$(document).ready()包裹它,它看起來是這樣的:

$(document).ready(function() { 
    $('a').click(function() { 
     alert("You can't leave!!!"); 
     return false; 
    }); 
}); 

現在只會被當文檔準備好執行。

要回答標題中的問題,請不要將所有內容都包含在$(document).ready()中 - 只需依賴存在完全加載的DOM的代碼即可。

+1

清除爲白天。非常感謝! – AKWF 2010-11-16 21:52:55

+1

@AKWF沒有問題 - 很樂意幫助:) – Skilldrick 2010-11-16 21:59:16

1

不,你只需要擁有那些語句裏面的時候$(function(){});

的功能,所有的第一次加載頁面可以定義在別處,你想執行。

+0

因此,聽起來像所有綁定到特定動態項目的綁定都需要在那裏。謝謝邁克。 – AKWF 2010-11-16 21:55:42

1

基本上啥子中運行,做的代碼時,身體被加載

讓我在一個小更詳細的解釋。

當頁面加載從第一行到最後一行的瀏覽器加載,當您在<head>標籤加載jQuery的,這被載入前<body>作爲<head>是身體

拿這個例子以上:

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="x" source="jquery.js" /> 
     <script type="x"> 
      $("#my_id").remove(); 
     </script> 
    </head> 
    <body> 
     <div id="my_id"></div> 
    </body> 
</html> 

,你可以看到加載的第一資源,多數民衆贊成是jquery.js,以下在那裏我有jQuery代碼WIL lexecute因爲jQuery已經加載行,所以$()存在。

問題是,jquery代碼正在尋找那個不存在的東西,因爲DOM還沒有解析它。

以下語法的用法是,當您將「匿名函數」發送給jquery時,它會存儲它直到文檔被完全加載,因此<div>將存在並且該命令成功執行。

$(function(){ 
}) 

那裏有寫這幾方面來看,主要方式是像這樣:

$(document).ready(function(){ 
    //Code here will only be run upon document ready. 
}); 

但我更願意做事的方式是:

mysite = {}; //Creates a "namespace/Object" for me to work within 
mysite.dialog = function(title,message){/*blah*/} 
mysite.init = function(){ 
    //Code here is for the Document Ready state. 
    mysite.dialog("hey","the document has been loaded"); 
} 

然後我店這在我的Application.js文件中,並且包括在jquery.js之後

然後在我的文檔中運行follo翼指揮。

$(document).ready(mysite.init); 
+0

我喜歡羅伯特。我很感激你花了這麼多時間來回答我的問題。謝謝! – AKWF 2010-11-16 21:54:58

相關問題