在jquery中返回0的宽度

时间:2011-06-29 15:39:22

标签: javascript jquery css

我有一些jquery脚本在窗口加载后运行

$(window).load( function() {
   $('.picture a img').each(function(index) {
       $(this).height(280);
       if ($(this).width() > $(this).height()) {
          alert("yes");
       } else {
          alert("no");
       }

   });
});
当我知道一些图像应该是“是”时,我总是得到一个“不”。当我在chrome中跟踪脚本时,我注意到$(this).width()总是返回0.我用谷歌搜索并且一些建议是图像没有加载但是这里我使用了window.load方法,我认为应该运行一次一切都搞定了。任何想法??

感谢您提前提供任何帮助

6 个答案:

答案 0 :(得分:1)

Chrome对图像宽度很奇怪。我在构建jQuery照片库时注意到了。如果您的图像宽度未在标签中专门设置,则chrome将返回0. FF,并且IE将计算宽度,但chrome不会。尝试实际设置宽度,看看你是否得到了所需的结果。

<img width="200" src="..." />

答案 1 :(得分:1)

您需要在加载图像时运行代码,以下代码应该有效:

$(window).load( function() {
   $('.picture a img').load( function() {
       $(this).height(280);
       if ($(this).width() > $(this).height()) {
          alert("yes");
       } else {
          alert("no");
       }
   });
}); 

请注意,每个与(window,img,iframe)关联的某种网络资源的DOM元素都会响应.load()事件。

答案 2 :(得分:0)

if ($(this).attr("width") > $(this).attr("height")) {

答案 3 :(得分:0)

尝试在图像上添加加载事件,因此只有在图像完全加载时才会执行。

$(window).load( function() {
  $('.picture a img').each(function(index) {
     $(this).bind('load', function () {
       $(this).height(280);
       if ($(this).width() > $(this).height()) {
          alert("yes");
       } else {
          alert("no");
       }
     })
   });
});

您还可以尝试检查图像对象

答案 4 :(得分:0)

我只是想补充一点,你还应该确保你的图像实际上是一个可见元素。我在过去尝试测量可见性时遇到了很多问题:隐藏或显示:无元素。如果您确实在尝试测量隐藏元素,可以通过执行类似

之类的操作来完成它
var width = $('img').show().width();
$('img').hide();

现在代码非常含糊,但是它让我想到了可见性闪烁。

答案 5 :(得分:-5)

在dom加载完成后运行脚本的正确方法是:

$(document).ready(function() { /*your code here*/ });