Я думаю, что это обсуждалось ранее .Проблема не в кешировании как таковом, а во времени: изображения, возможно, уже были загружены к тому времени, когда обработчик событий присоединен (поэтому он никогда не запускается).Это также может произойти, если не происходит кэширование, например, в многопоточном браузере при очень быстром соединении.К счастью, есть свойство .complete
, которое вы можете использовать:
var load_handler = function() {
loadedImages++;
…
}
$(this).find('img').filter(function() {
return this.complete;
}).each(load_handler).end().load(load_handler);
Вы также можете создать свою собственную функцию присоединения к событию:
jQuery.fn.extend({
ensureLoad: function(handler) {
return this.each(function() {
if(this.complete) {
handler.call(this);
} else {
$(this).load(handler);
}
});
}
});
И затем вызвать ее следующим образом:
$(this).find('img').ensureLoad(function(){
loadedImages++;
if(loadedImages == $this.find('img').length){
…
});