Javascript $(window).on(';load';)在jQuery(document).ready()中未正确调用

Javascript $(window).on(';load';)在jQuery(document).ready()中未正确调用,javascript,jquery,Javascript,Jquery,我以前在我的JavaScript文件中有这段代码,它过去可以工作 jQuery(document).ready(function ($) { "use strict"; $(window).load(function (event) { LoadPage(); }); 在将jQuery更新到3.3.1版之后,我不得不将$(window).load替换为$(window).on('load'),因为它已被弃用。这就是新代码: jQuery(documen

我以前在我的JavaScript文件中有这段代码,它过去可以工作

jQuery(document).ready(function ($) {
    "use strict";

    $(window).load(function (event) {
        LoadPage();
    });
在将jQuery更新到3.3.1版之后,我不得不将
$(window).load
替换为
$(window).on('load')
,因为它已被弃用。这就是新代码:

jQuery(document).ready(function ($) {
    "use strict";

    $(window).on('load', function (event) {
        LoadPage();
    });

问题是这段新代码并没有一直按预期运行。。。在Chrome
LoadPage()中,方法按预期调用。如果我使用MS Edge,它根本不会命中
LoadPage()
方法。如果我使用Chrome隐姓埋名模式,它有时会击中方法,有时不会。。。知道为什么会发生这种情况吗?

您不能期望jQuery跨浏览器实现能够完美工作。没有完美的软件

首先,我建议使用平原

window.onload = function() {
    // Your code here
};
并尝试在您的目标浏览器上运行


其次,您需要努力研究和实施变通方法。如果有效,请将其发布到此处以帮助他人。

好的,我在此处找到了答案:

这是来自jQuery核心团队的Timmy Willison的解释:

要清楚的是,我们知道是什么导致了这一点。我们最近准备好了 处理程序异步启动。这有着难以理解的优势 放弃。缺点是准备就绪的处理程序有时会触发 如果加载事件触发足够快,则在加载事件之后。侧面 您在本期中看到的效果是绑定了一个加载事件 加载事件已激发后的处理程序

修复方法是将负载绑定到ready之外:

以下是调用函数的方式:

$(function() {
  // Things that need to happen when the document is ready
});

$(window).on("load", function() {
  // Things that need to happen after full load
});

我不得不抛弃这两个jQuery,将它们分开,并使用简单的旧JavaScript。这在IE11、Edge、Chrome和Firefox中表现一致

document.addEventListener('DOMContentLoaded',function () {'do stuff'}

window.onload = function () {'then do this stuff'}

为什么需要在$(document).ready()内使用load事件?单独使用.ready()有什么问题?谢谢Pezhvak,当页面准备就绪时,页面上会出现一个进度条。加载页面时,我会隐藏进度条。您正试图在.ready回调中调用window.load。您可能希望在.ready回调之外运行window.load回调。基本上,您要求代码启动window.load,但等待文档准备就绪。所以理论上你的函数永远不应该运行!在.ready()外部注册你的.on('load)事件。谢谢Sandra和Pezhvak:从jQuery 3看来,windows.load不能在document.ready内部。我已经发布了一个到github页面的链接。还有几个问题说,
document.ready
总是在
window.load
之前。