2011-08-21 34 views
9

Tôi đang cố tải trước một vài hình ảnh và muốn trang của tôi bị giữ cho đến khi tất cả các hình ảnh được tải. Vì vậy, những gì tôi đang làm là:Sự cố IE9 với sự kiện tải jQuery() không kích hoạt

var numPics = $('#bg img').length; 
var picsLoaded = 0; 
$('#bg img').load(function(){ 
    picsLoaded++; 
    if (picsLoaded == numPics){ 
     buildPage(); 
    } 

}); 

Điều này làm việc tốt trong tất cả các trình duyệt ngoại trừ (bạn đã đoán) IE. Bằng cách nào đó Internet Explorer sẽ tải xuống tất cả hình ảnh (tôi có thể thấy chúng được tải trong các công cụ dev), nhưng sẽ chỉ ngẫu nhiên kích hoạt load -Event (mỗi lần làm mới sẽ cung cấp cho tôi một số mới, thông thường nó sẽ đếm tới một nửa Tôi đã thử các phiên bản khác nhau của jQuery (tôi bắt đầu với phiên bản 1.6.1) và cũng đã đọc về các vấn đề như thế này trên trang web này nhưng không thể tìm thấy bất kỳ câu trả lời nào được nêu ra. . vấn đề liên quan như busting nó (hoặc nối một chuỗi truy vấn ngẫu nhiên với nguồn ảnh) đã không tạo sự khác biệt

Trả lời

15

cố gắng tái gán nguồn hình ảnh để kích hoạt sự kiện:

var numPics = $('#bg img').length; 
var picsLoaded = 0; 
$('#bg img').each(function(index) { 
    var img = $(this); 
    img.load(function(){ 
     picsLoaded++; 
     if (picsLoaded == numPics){ 
      buildPage(); 
     } 
    }); 
    img.attr("src", img.attr("src")); 
}); 
+0

Wow, cảm ơn, này chỉ hoạt động tốt! Bạn có thể cho tôi biết tại sao IE sẽ chấp nhận điều này chứ không phải phiên bản cũ? – m90

+0

Trong một từ? Microsoft. Tuy nhiên, một hành vi ngớ ngẩn khác "do thiết kế" mà không ai có thể hiểu được. –

+0

Ok, đó là những gì tôi mong đợi, mặc dù tôi một lần nữa bắt gặp bản thân mình mong muốn có một lời giải thích hợp lý hơn! Cảm ơn! – m90

0

+ để câu trả lời: Không chạy này trong firefox 3.6:

img.attr("src", img.attr("src")); 

Một số lượng hình ảnh sẽ không được nạp! Tôi thích:

if($.browser.msie && parseInt($.browser.version, 10) >= 9) { 
    img_load.attr("src", img_load.attr("src")); 
} 
2

Tính đến jQuery 1.8, $ .load() đã bị phản (http://bugs.jquery.com/ticket/11733) ủng hộ:

image.bind('load', function() {}); 

Cũng bình luận Puchu là thú vị. Tuy nhiên, $ .browser đã không được chấp nhận và sử dụng UA đánh hơi. Đoạn mã này sẽ thực hiện thủ thuật: https://gist.github.com/527683 (xem Javascript IE detection, why not use simple conditional comments?).

CHỈNH SỬA: Lỗi này vẫn tồn tại trong IE 10. Ngoài ra đoạn gist tôi liên kết cũng không phát hiện IE 10, nhưng có các nhận xét ở đó để giải quyết.

+0

Tại chỗ tốt, thông thường các tài liệu jQuery nói rằng nó bị khấu hao nhưng trong trường hợp này nó không. +1 –

0

Đừng tạo ra một nguồn năng động như nhiều đề nghị, tất cả các bạn phải làm là áp dụng các nguồn sau khi liên kết các sự kiện tải như vậy ...

$("img").load(function() {alert("loaded!"}).attr("src", imgSource);

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