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



我曾经在我的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 Incognito模式,它有时会触及该方法,有时不会...任何想法会发生这种情况?

好吧,我在这里找到答案:jquery 3 -github essume

这是解释,由 jQuery Core Team 的Timmy Willison撰写:

要清楚,我们了解导致这一原因的原因。我们最近准备好了 处理者异步发射。这具有很难的优势 放弃。缺点是准备好的处理程序有时可以发射 加载事件发生后,如果加载事件发射得足够快。旁边 您在本期中看到的效果是您正在绑定负载事件 负载事件已经解雇后处理程序。

修复程序是绑定现成外部的负载:

这是应调用函数的方式:

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

您不能指望jQuery跨浏览器实现将完美效果。没有完美的软件。

首先,我建议使用普通

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

,如果它可以在目标浏览器上使用。

第二,您需要努力研究和实施解决方法。如果有效,请在此处发布以帮助他人。

我不得不抛弃两个,分开它们并使用普通的旧javaScript。这在IE 11,Edge,Chrome和Firefox中均匀地行为。

document.addEventListener('DOMContentLoaded',function () {'do stuff'}
window.onload = function () {'then do this stuff'}

我今天遇到了这个问题。因为我必须在我的页面上的document.ready之后触发第三方代码,但是该代码上面已经具有window.on("load")。因此,我必须像这样猴子绘制jQuery on功能。

(function safeLoaded($){
    var old = $.fn.on;
    var monkey_on = function(){
        if(this[0] == window && arguments[0] == "load"){
            if (typeof arguments[1] === 'function' && document.readyState === "complete"){
                arguments[1].call(this);
                return this;
            }
        }
        return old.apply(this, arguments);
    };
    $.fn.on = monkey_on;
})(jQuery);

如果文档已经加载,则只需直接触发函数而不是为其添加事件侦听器即可。不知道他们为什么不在jQuery上这样做。

相关内容

最新更新