之间有什么区别
$(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");
}