Jquery $(窗口).on(“加载”)在$(文档).ready之前执行。不应该';你还没准备好先执行吗? 文件 $(文档).ready(函数(){ var h=$(“#im”).height(); 警报(“准备就绪,高度为“+h”); }); $(窗口).on(“加载”,函数(){ var h=$(“#im”).height(); 警报(“来自负载的你好。高度为“+h”); });
1) 以上是我的代码。当我在Chrome64(64位)中运行时。window.load部分在document.ready之前执行 2) 其次,根据我在这些论坛和网上其他地方读到的信息,我不应该从document.ready中获得图像高度,但是,它可以工作,我从这两个功能中获得相同的高度Jquery $(窗口).on(“加载”)在$(文档).ready之前执行。不应该';你还没准备好先执行吗? 文件 $(文档).ready(函数(){ var h=$(“#im”).height(); 警报(“准备就绪,高度为“+h”); }); $(窗口).on(“加载”,函数(){ var h=$(“#im”).height(); 警报(“来自负载的你好。高度为“+h”); }); ,jquery,html,Jquery,Html,1) 以上是我的代码。当我在Chrome64(64位)中运行时。window.load部分在document.ready之前执行 2) 其次,根据我在这些论坛和网上其他地方读到的信息,我不应该从document.ready中获得图像高度,但是,它可以工作,我从这两个功能中获得相同的高度 为什么会发生这种情况?jQuery的ready事件首先由其延迟的实现处理,该实现在内部使用(可能是为了允许运行)。本质上是这样的: <!DOCTYPE html> <html lang="en"
为什么会发生这种情况?jQuery的
ready
事件首先由其延迟的实现处理,该实现在内部使用(可能是为了允许运行)。本质上是这样的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="jquery-3.3.1.js"></script>
<script>
$(document).ready(function(){
var h = $("#im").height();
alert("Hello from ready. Height is " + h);
});
$(window).on("load", function(){
var h = $("#im").height();
alert("Hello from load. Height is " + h);
});
</script>
</head>
<body>
<p class="" id="msg"></p>
<p class="" id="msg2"></p>
<img id="im" src="flower.jpg" alt="">
</body>
</html>
如果页面足够简单,使用setTimeout(…,0)
可以延迟回调的执行,从而允许load
事件首先运行回调。我在Chrome64.0.3282.186上测试了它,在load
之前触发的jQueryready
事件只有大约10%的时间
如果您直接使用document.addEventListener
,您的代码将按预期工作。解决方案1
加载窗口后获取图像信息或向图像添加eventListener。
或
这是你的问题的答案
解决方案2
确实,当文档准备就绪时,只加载结构,相反,窗口加载所有组件,包括图像,更多组件准备就绪并加载
更多:
希望这能有所帮助。获取图像高度是否有问题?我无法想象这怎么可能算作一个错误。此外,请清除缓存。浏览器可能能够直接告诉缓存图像的图像属性。我确信“load
在所有图像完成加载之前发生”并不意味着“当load
发生时,我们保证没有图像完成加载”。
document.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
// Your `ready` callback
}, 0);
});
$(window).on('load', function() {/*Do Stuff*/}
$('#image').on('load', function() {/*Do Stuff*/}