javascript - 为什么在 chrome 中刷新页面时 width 的值设置为零?

标签 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>

这是 jQuery 代码 (script.js):

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

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

最佳答案

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);
});

就个人而言,我建议您使用 jQuery 的 .height().width() 方法,如下所示:

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

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

关于javascript - 为什么在 chrome 中刷新页面时 width 的值设置为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688080/

相关文章:

javascript - 无法让这个简单的脚本正确运行

javascript - jquery .change 被 .blur 覆盖

javascript - JQuery Datepicker - onSelect 日期格式

javascript - jQuery focus.bind(domObj) 是做什么的?

javascript - HTML : Photo swipe is not workling

javascript - php javascript 拖放

jquery - 如何将 html 从 textarea 传递到 jQuery?

javascript - 加载(缓存?)网络元素到新页面

python - 没有递归搜索python的xml解析

javascript - Style.visibility 不隐藏元素