我曾经在我的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上这样做。