img.width和img.height里面$(img).load()和/或img.onload = ...在IE8中返回rubish值

时间:2011-08-26 12:56:43

标签: jquery internet-explorer height width image

我知道这个话题已经讨论了很多,但我找不到任何对我有用的解决方案。所以,我的代码大致是:

 var img =me.images[curID]
 var f = function() {
      var i = $(img);
      img.onload = null;
      $(img).unbind('load');
      var iH = img.height; /*works for Firefox, Safari, Opera, Chrome*/
      var iW = img.width;
      if (jQuery.browser.msie) {
          /*nothing works*/
          iH = i.width(); /* returns 0*/
          iH = i.attr('height'); /*returns undefined*/
          iH = img.height; /*returns wrong 120:30 px instead of 1000:410 */
          /*once page is reloaded - everything is fine */
      }
 }

 src = img.src;
 if ( (!img.complete) ||  
       (typeof img.naturalWidth != 'undefined' && img.naturalWidth == 0)
     ) {  /*WAIT FOR LOAD*/
        img.src = "";
        $(img).load(f);
        img.onload = f;
        img.src = src;  
 } else { /*SHOW */
        f.apply(img);
 }

我做错了什么?

p / s /图像在淡入淡出的div内,所以我基本上想在fadeIn之前调整图像大小。

EDIT1:我阵列上的一些信息:

....
this.slides = this.slidesContainer.children();
this.n = this.slides.length;
for (var i=0;i<this.n;i++) {
    var im = this.slides.eq(i).find('img:first')[0];    
    var sr = im.src;
    this.images[i]    = im;
    this.imagesSrc[i] = sr; 
}
...

EDIT2:我重写了一段代码(添加了onload),现在它到处都是(IE / FF / Opera / Safari / ...) 程序流程(IE8)如下:

  1. 等待加载
  2. onload fired(如果我评论它 - jQuery()。load被触发)。
  3. 在f()里面:img.width = 120,img.height = 30(似乎没有加载。正确的宽度/高度是1000x410)
  4. 很难说触发它的是什么,因为它并不总是发生,甚至在图像没有兑现时也不会发生。但有时候,我会看到那些奇怪的宽度/高度。

    EDIT3:有一些关于如何加载图像的解决方案(herehere),在一个.onload中使用,在另一个 - .load中,我使用两者,所以应该是即使代码可能不是最佳且非常整洁,也很好。

1 个答案:

答案 0 :(得分:0)

如果您正在使用jQuery尝试使用jQuery获取图像的方式。

而不是var img =me.images[curID]只做:

var img = $('img#imageID');

//get height:  
img.height()
//get width:
img.width();