当页面在chrome中刷新时,为什么width的值被设置为零?

Jat*_*tin 3 javascript jquery dom google-chrome width

我写了一些jQuery代码,其中我在屏幕上获取图像的宽度并将它们存储在变量中.然后我在控制台中记录了该变量以查看它的值.当页面第一次加载时,它显示正确的值,但是如果我按F5,它将显示0作为宽度.

这是HTML:

    <body>
        <img src="img1.jpg" alt="image">
        <img src="img1.jpg" alt="image">
        <script type="text/javascript" src="script.js"></script>
    </body>
Run Code Online (Sandbox Code Playgroud)

这是jQuery代码(script.js):

    jQuery(document).ready(function($) {
        var imgs = $('img');
        var width = imgs[0].width;
        console.log(width);
    });
Run Code Online (Sandbox Code Playgroud)

600第一次加载页面时会显示控制台,但是当我按下F5时会显示0.为什么会这样?

jfr*_*d00 7

目前jQuery(document).ready(),无法保证图像已加载.必须加载图像才能获得宽度.图像以异步方式加载,可能在jQuery(document).ready()火灾后完成.

要知道,对于确保图像加载,你要么需要有一个onload处理程序的具体形象,你可以知道什么时候是专门装载了它,或者你只需要检查图像的宽度时,在页面中的所有图像都加载window.onload或在jQuery中$(window).load(fn).

最简单的方法是将代码更改为:

jQuery(window).load(function() {
    var imgs = jQuery('img');
    var width = imgs[0].width;
    console.log(width);
});
Run Code Online (Sandbox Code Playgroud)

就个人而言,我建议您使用jQuery .height().width()这样的方法:

jQuery(window).load(function() {
    var imgs = jQuery('img');
    var width = imgs.eq(0).width();
    console.log(width);
});
Run Code Online (Sandbox Code Playgroud)

你可以在这看到这个工作:http://jsfiddle.net/jfriend00/D4CyN/