$(document).ready(initialize) 和 $(document).on('ready', initialize) 有什么区别?



之间有什么区别

$(document).ready(initialize); 

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

在我看来,它们的工作方式似乎是一样的。

$(document).on('ready',initialize);在执行文件时,如果DOM已经就绪,则不会工作。

$(document).ready()对此有一个特殊的处理:它确保它总是被称为

TL;DR

  • $(document).on('ready', ...)弃用,因为它不会在DOM完全解析后执行绑定的回调。它获取事件对象作为第一个参数。

  • $().ready()被传递了对jQuery的引用作为第一个参数。


详细答案

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

此表达式将ready事件处理程序绑定到document,就像您从任何其他事件处理程序中所期望的一样。从jQuery 1.8:开始,不赞成使用它来侦听DOM ready

还有$(document).bind("ready", handler)自jQuery 1.8起已弃用。这与ready方法的行为类似,但如果就绪事件已经激发,并且您尝试.bind("ready"),则绑定处理程序将不会执行。以这种方式绑定的Ready处理程序在以上其他三种方法的任何绑定之后执行。

请注意,ready是一个自定义事件,由jQuery内部触发。这也意味着你可以手动触发它,这可能会把事情搞砸。


$(document).ready(initialize);

此表达式并没有真正绑定事件处理程序。jQuery.fn.ready是一个专用方法,用于注册回调,以便在DOM完全解析时运行。jQuery正在向promise对象添加回调,不管您将哪个选择器传递给$

此外,回调会传递到jQuery对象的引用,而不是事件对象。


源代码的以下部分很好地表明,像这样注册的回调处理方式不同:

// 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");
}

最新更新