$(window).on(' load')在jQuery(文档)中没有被正确调用.ready()

时间:2018-02-10 05:20:15

标签: javascript jquery

我以前在我的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隐身模式,它有时会触及该方法,有时并不知道为什么会发生这种情况?

3 个答案:

答案 0 :(得分:2)

好的,我在这里找到答案:jQuery 3 - Github Issues

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

  

要清楚,我们了解导致这种情况的原因。我们最近做好了准备   处理程序异步启动。这具有难以实现的优点   放弃。缺点是就绪处理器有时会发射   在load事件之后,如果load事件足够快地触发。旁边   你在这个问题上看到的效果是你绑定了一个加载事件   load事件发生后的处理程序。

     

修复方法是将负载绑定在ready:

之外

这是应该调用函数的方式:

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

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

答案 1 :(得分:0)

您不能指望jQuery跨浏览器实现能够完美运行。没有完美的软件。

首先,我建议使用普通的

window.onload = function() {
    // Your code here
};

并尝试在目标浏览器上运行。

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

答案 2 :(得分:0)

我不得不为两者放弃 jQuery,将它们分开,并使用普通的旧 JavaScript。这在 IE 11、Edge、Chrome 和 Firefox 中表现一致。

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

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