【问题标题】:jQuery onLoad x jQuery onDomreadyjQuery onLoad x jQuery onDomready
【发布时间】:2014-03-07 12:27:02
【问题描述】:

每次我使用jsFiddle 时,我都会看到两个通过 jQuery 初始化内容的选项:onLoad 或 onDomReady。

我用我写的大部分脚本进行了测试,没有功能上的差异。在谷歌上搜索我发现主要区别之一是通过 onLoad,脚本只会在所有元素加载后才开始运行,包括 CSS 外部文件、JS 外部文件、图像等,如果您需要,这将很有用以特定顺序加载 JS 文件,但在任何给定时刻,其中一个文件引用另一个尚未加载的文件,而通过 onDomReady 一旦加载了 HTML 页面内容,脚本就已经开始加载,而不必其他人有到过。

知道这个区别对吗?是否还有其他差异需要研究和感知?

【问题讨论】:

  • @Pilot 我不认为你理解我的问题。我不是在寻求代码方面的帮助,而是寻求帮助以了解这两种方法之间的区别。我写了我对这些差异的理解程度,并要求提供更多信息。我想了解每个人的概念。我必须为此写一个小提琴吗?
  • 一个主要区别是,jquery 就绪处理程序将被触发,即使在 DOM 有效地“准备好”之后设置了处理程序,jquery 在内部使用一个 promise。如果在加载窗口后设置了处理程序,则不会触发窗口 onload 事件。例如:jsfiddle.net/c58a6
  • 看了你的小提琴,发现onDomready可以执行多次,而onLoad只能执行一次,对吗?
  • 您可以绑定多个 onload 处理程序,但如果在窗口加载后绑定,这些处理程序将不会被触发。
  • 所以绑定多个 onload 处理程序最终没用,对吧?

标签: javascript jquery


【解决方案1】:

将评论作为答案:

一个主要区别,jquery ready 'pseudo' 事件将被触发甚至处理程序 在 DOM 有效“准备好”之后设置,jquery 在内部使用 承诺。如果在之后设置处理程序,则不会触发窗口 onload 事件 窗口已加载。例如:http://jsfiddle.net/c58a6/

然后应该注意的是,在构建中没有 jQuery 文档就绪事件的等价物。例如,DOMContentLoaded in-build 事件如果在 DOM 准备好后解决,则不会触发。

【讨论】:

  • 您能否进一步解释一下“jquery 使用内部承诺”的含义?和this有关系吗?
  • 是的,就是这样。但是如果你不知道它背后的承诺和异步行为的概念,可能会有点难以解释(至少像我这样的人)。您可以检查 jQuery 源并搜索 readyList,这是使用的延迟对象,然后公开承诺接口。延迟对象和 Promise 的区别在于不能手动解决 Promise。但就像我说的那样,解释这一切可能会很长
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2011-07-22
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多