2012-11-27 49 views
16

之間有什麼區別:

$(document).ready(initialize); 

$(document).on('ready',initialize); 

對我來說,他們似乎以同樣的方式工作。

+2

一個直接通過輔助方法,使用方法,其它代理。 – Sampson

回答

18

如果執行文件時DOM已經準備好,$(document).on('ready',initialize);將不起作用。

$(document).ready()有這種特殊的處理:它可以確保它始終稱爲

+0

後者也與jQuery對象的內容無關。所以現在'$()。ready()'和'$('foo')。ready()'完全是一回事。 – ThiefMaster

+0

對我來說,它似乎是人們+1伏都教的答案,他們不明白tbh –

7

TL;博士

  • $(document).on('ready', ...)被廢棄了,因爲它不執行綁定後的DOM完全回調解析。獲取事件對象作爲第一個參數。

  • $().ready()作爲第一個參數通過對jQuery的引用。


$(document).on('ready',initialize);

是一個ready事件處理程序綁定到document,就像你從任何其他事件處理程序的期望。 Using this to listen to DOM ready is deprecated as of jQuery 1.8

還有$(document).bind("ready", handler)棄用的jQuery 1.8的。這與ready方法的行爲相似,但如果ready事件已經觸發,並且您嘗試執行.bind("ready"),則綁定的處理程序將不會執行。以這種方式綁定的就緒處理程序在被上述其他三種方法綁定之後執行。

請注意,ready是一個自定義事件,並且triggered by jQuery internally。這也意味着你可以手動觸發它,這可能會搞砸了。


$(document).ready(initialize);

並沒有真正結合事件處理程序。 jQuery.fn.ready is a dedicated method註冊回調,當DOM被完全解析時運行。 jQuery將回調添加到承諾對象,並且您傳遞給$的選擇器無關緊要。

此外,回調傳遞給jQuery對象而不是事件對象的引用。


This part of the source很好地示出了註冊這樣回調的處理方式不同:

// If there are functions bound, to execute 
readyList.resolveWith(document, [jQuery]); 

// Trigger any bound ready events 
if (jQuery.fn.trigger) { 
    jQuery(document).trigger("ready").off("ready"); 
}