2013-01-20 32 views
9

Tôi đang cố gắng tải trước hình ảnh và đặt chiều cao và chiều rộng thành vùng chứa.gọi lại tải lại trên hình ảnh không được gọi là ie8

Sự cố có vẻ như với bộ đệm ẩn trong ie8 vì nó không tải được trên các lần làm mới tiếp theo.

Tôi đã tra cứu và thử nhiều giải pháp nhưng dường như không có gì hoạt động, ít nhất là không nhất quán.

hiện Javascript:

img = new Image(); 
    img.src = '/images/site/image.jpg'; 
    img.onload=function(){ 
     var width = img.width + 'px'; 
     var height = img.height + 'px'; 

     $('#container').css({'width':width, 
          'height':height 
     }); 
    }; 

Bất kỳ lời đề nghị được đánh giá cao, cảm ơn.

Trả lời

29

Bạn phải đặt cuộc gọi lại onload trước khi đặt src.

Khi hình ảnh được lưu vào bộ nhớ cache, gọi lại tải lại không được gọi bằng mã của bạn khi sự kiện load được tạo trước khi cài đặt lại cuộc gọi.

Làm điều này:

img = new Image(); 
img.onload=function(){ 
    var width = img.width + 'px'; 
    var height = img.height + 'px'; 

    $('#container').css({'width':width, 
         'height':height 
    }); 
}; 
img.src = '/images/site/image.jpg'; 
+0

cảm ơn cho lời giải thích. cũng nhanh quá! –

4

Đây là cách chậm IE7 và IE8 là, ngay cả sau khi cài đặt src SAU sự kiện onload, người nghe sự kiện vẫn còn nhớ nó.

Kiểm tra điều này, đây là những gì tôi cuối cùng đã phải làm cho một trong các dự án của tôi - sẵn sàng cho việc này? Settimeout. Yup! Đó là cách làm chậm bạn phải viết mã của bạn để có được những thứ để "làm việc" trong ví dụ.

myImage.onload = doSomething; 

var slowMeDown = setTimeout(function(){ 
         myImage.src = "img/somePic.jpg"; 
       },300); 

Un-freaking-tin cậy ....

+0

tôi cảm thấy đau đớn của bạn – antpaw

Các vấn đề liên quan