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

时间:2012-11-27 17:04:47

标签: javascript jquery

有什么区别:

  $(document).ready(initialize); 

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

对我来说,他们似乎也以同样的方式工作。

2 个答案:

答案 0 :(得分:18)

如果在执行文件时DOM已经准备好,

$(document).on('ready',initialize);将无效。

$(document).ready()对此进行了特殊处理:它确保始终调用

答案 1 :(得分: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

  

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

请注意,ready是自定义事件,triggered by jQuery internally。这也意味着你可以手动触发它,这可能搞砸了。


  

$(document).ready(initialize);

没有真正绑定事件处理程序。 jQuery.fn.ready is a dedicated method注册在完全解析DOM时运行的回调。 jQuery正在将回调添加到promise对象,并且传递给$的选择器无关紧要。

此外,回调传递了对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");
}