window.onload vs $(document).ready()

IT技术 javascript jquery dom-events unobtrusive-javascript
2020-12-18 16:37:44

JavaScriptwindow.onload和 jQuery 的$(document).ready()方法有什么区别

6个回答

ready事件发生在 HTML 文档被加载之后,而该onload事件发生在之后,当所有内容(例如图像)也已经被加载时。

onload事件是 DOM 中的标准事件,而该ready事件是特定于 jQuery 的。ready事件的目的是它应该在文档加载后尽早发生,以便为页面中的元素添加功能的代码不必等待所有内容加载完毕。

2021-02-14 16:37:44
仅供参考,@baptx 给出的链接本身链接到基于DOMContentLoaded(当它存在时)或readystatechanged(对于 IE)的 js 函数github.com/dperini/ContentLoaded/blob/master/src/... 所以大概这大概是它所需要的实现 jQuery 的ready.
2021-02-28 16:37:44
@baptx 不一样的结果,即使在 DOM 有效准备好之后,文档准备处理程序也会被触发,使用Promise。DOMContentLoaded惯于。因此,在异步加载外部脚本时,文档 jquery 就绪处理程序真的很有用
2021-03-04 16:37:44
没有这样的事件onloadonload是对象属性的名称,该属性存储在load触发事件时要调用的函数
2021-03-04 16:37:44
还有 document.onload(参见stackoverflow.com/questions/588040/...
2021-03-08 16:37:44

window.onload是内置的 JavaScript 事件,但由于它的实现在浏览器(Firefox、Internet Explorer 6、Internet Explorer 8 和Opera之间微妙的怪癖,jQuery 提供了,它将这些抽象出来,并在页面的 DOM 准备好后立即触发(不等待图像等)。document.ready

$(document).ready(请注意,它不是 document.ready,这是未定义的)是一个 jQuery 函数,包装并提供对以下事件的一致性

  • document.ondomcontentready/ document.ondomcontentloaded- 加载文档的 DOM 时触发的新事件(可能在加载图像等之前一段时间);再次,在 Internet Explorer 和世界其他地方略有不同
  • window.onload(即使在旧浏览器中也实现),当整个页面加载(图像、样式等)时触发
@Tim Down:合理是这里的关键词;至少有一些对象嗅探曾经是必要的,即使是onload(与 FF/IE/Opera 存在差异)。至于DOMContentLoaded,你是完全正确的。编辑以澄清。
2021-02-08 16:37:44
你指的是什么类型的对象嗅探?
2021-02-14 16:37:44
写“document.ready”是不是不正确?文档对象没有就绪方法,jQuery 对象会从 $(document) 调用返回。如果我是对的,请编辑此答案,因为这非常令人困惑。
2021-02-17 16:37:44
这里有一个轻微的误解:load事件window在浏览器中合理一致地实现。jQuery 和其他库试图解决的问题是您提到的问题,即在load加载所有依赖资源(例如图像和样式表)之前不会触发事件,这可能是 DOM 完全加载后的很长时间,呈现并准备好进行交互。大多数浏览器在 DOM 就绪时触发的事件称为DOMContentLoaded,而不是DOMContentReady
2021-03-07 16:37:44
@Tim Down:我知道 Opera它,但它的事件触发器有点古怪(可靠地触发,document.onload是可用的)。就 window.onload 而言:window.onload = fn1;window.onload=fn2;- 只有 fn2 会在加载时被调用。一些免费的网络主机将他们自己的代码插入到文档中,有时这会破坏页面内的代码。
2021-03-08 16:37:44

$(document).ready()是一个 jQuery 事件。$(document).ready()一旦 DOM 准备好(这意味着浏览器已经解析了 HTML 并构建了 DOM 树),JQuery 的方法就会被调用。这使您可以在文档准备好进行操作时立即运行代码。

例如,如果浏览器支持 DOMContentLoaded 事件(就像许多非 IE 浏览器一样),那么它将在该事件上触发。(注意 DOMContentLoaded 事件仅在 IE9+ 中添加到 IE 中。)

为此可以使用两种语法:

$( document ).ready(function() {
   console.log( "ready!" );
});

或者简写版本:

$(function() {
   console.log( "ready!" );
});

要点$(document).ready()

  • 它不会等待图像加载。
  • 用于在 DOM 完全加载时执行 JavaScript。将事件处理程序放在这里。
  • 可以多次使用。
  • 更换$jQuery,当你收到“$没有定义”。
  • 如果要操作图像,则不使用。使用$(window).load()来代替。

window.onload()是一个原生的 JavaScript 函数。window.onload()当页面上的所有内容都加载完毕时,事件将触发,包括 DOM(文档对象模型)、横幅广告和图像。两者之间的另一个区别是,虽然我们可以拥有多个$(document).ready()功能,但我们只能拥有一个onload功能。

为什么有人要多次使用 $(document).ready() ?
2021-02-12 16:37:44
次要观点:对 IE 的讨论措辞不当。并不是 IE(8 及之前)在文档的 readyState 完成之前“无法安全触发”,而是 IE缺少DOMContentLoaded 事件。不是“安全”问题,而是 IE 中缺少的功能,在 IE 9 中添加。
2021-03-01 16:37:44
这完全是另一个主题,但如果我理解您的要求,它取决于您如何构建页面,包括您放置 js 文件的顺序。这是一个更详细的链接:ablogaboutcode.com/2011/06/14/... HTH, James
2021-03-02 16:37:44
你是对的,所以我编辑了答案以反映你的评论,谢谢!
2021-03-07 16:37:44
你说“它不会等待图像加载。” 其他文件呢,最重要的是js?通常在从另一个文件调用函数之前 - 我需要知道它是否已加载。
2021-03-09 16:37:44

一个Windows负载事件触发时,所有的页面上的内容满载包括DOM(文档对象模型)的内容和异步的JavaScript框架和图像您也可以使用 body onload=。两者都是一样的;window.onload = function(){}并且<body onload="func();">是使用相同事件的不同方式。

jQuery$document.ready函数事件执行时间早于window.onloadDOM(文档对象模型)加载到您的页面后调用。它不会等待图像、帧完全加载

摘自以下文章: how $document.ready()is different fromwindow.onload()

如果不是逐字复制,我可能会同意。
2021-02-22 16:37:44
我认为这是最好的答案!
2021-03-09 16:37:44

一个小技巧:

始终使用window.addEventListener向窗口添加事件。因为这样您就可以在不同的事件处理程序中执行代码。

正确代码:

window.addEventListener('load', function () {
  alert('Hello!')
})

window.addEventListener('load', function () {
  alert('Bye!')
})

无效的代码:

window.onload = function () {
  alert('Hello!') // it will not work!!!
}

window.onload = function () {
  alert('Bye!') 
}

这是因为 onload 只是对象的属性,它被覆盖了。

与 类比addEventListener,使用$(document).ready()比 onload更好

这并没有回答所提出的问题。
2021-02-16 16:37:44