javascript – 为什么切换到jQuery 3后我的’load’事件/函数没有被执行?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 为什么切换到jQuery 3后我的’load’事件/函数没有被执行?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2134字,纯文字阅读大概需要4分钟。
内容图文
由于我已经从jQuery 1.x / jQuery 2.x升级到jQuery 3.x,我的现有代码将不再正确执行.一切正常,但加载事件监听器不再被触发或有时被触发:
$(function() {
$(window).on("load", function() {
// this line will never/occasionally be executed
console.log("window is loaded!");
});
});
解决方法:
使用/切换到jQuery 3时可能会出现问题.这是因为新jQuery 3中的所有就绪状态现在都是完全异步的.这意味着,没有给定代码执行的命令.
因此,可能会发生,在执行就绪状态之前已触发负载.当你的ready函数现在最终被触发时,你的加载监听器太晚了,不会被执行.
jQuery用法:
要更改此行为,只需删除load事件侦听器初始化周围的就绪状态.没有必要用ready函数封装它.你可以不用初始化它们.
// $(function() {
$(window).on("load", function() {
// this line will now be executed again
console.log("window is loaded!");
});
// });
如果您需要或想要注册这两个事件,您可以自己注册加载事件,并在就绪状态内决定下一步做什么.
// track the loading state by yourself
var windowLoaded = false;
$(window).on("load", function() {
windowLoaded = true;
});
$(function() {
function afterLoad() {
console.log("loaded");
}
// decide inside your ready state what to do
if( !windowLoaded ) {
$(window).on("load", afterLoad);
}
else {
afterLoad();
}
});
jQuery插件:
另一种情况是jQuery插件,它也使用了load事件.例如:
(function($, window) {
$.fn.myPlugin = function() {
$(window).on("load", start);
function start() {
console.log("plugin initialized and window loaded");
}
};
})(jQuery, window);
如果开发人员/用户现在将插件初始化包装在就绪状态,则问题可能再次发生,就像之前解释的那样:
$(function() {
$("#element").myPlugin();
});
解决方案是自己跟踪插件中的加载事件,以打破就绪状态.
(function($, window) {
// track the loading state beside the plugin initialization
var windowLoaded = false;
$(window).on("load", function() {
windowLoaded = true;
});
$.fn.myPlugin = function() {
// decide inside your plugin how to start
if( !windowLoaded ) {
$(window).on("load", start);
}
else {
start();
}
function start() {
console.log("plugin initialized and window loaded");
}
};
})(jQuery, window);
结论:
即使你没有遇到这个问题,在你的测试中,你应该在使用jQuery 3时立即更改这些代码,因为其他用户/不同的浏览器可能会遇到这个问题.其他人可能会遇到问题,因为它是异步的,你永远不知道你的代码何时被执行…
内容总结
以上是互联网集市为您收集整理的javascript – 为什么切换到jQuery 3后我的’load’事件/函数没有被执行?全部内容,希望文章能够帮你解决javascript – 为什么切换到jQuery 3后我的’load’事件/函数没有被执行?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。