Я знаю, что об этом спрашивали миллион лет назад, но я полагаю, что внесу свое решение, которое аналогично, но с меньшими накладными расходами и вводом-выводом.
По сути, вы создаете собственный метод jQuery, который выполняетаналогичные умения все в одной функции:
$.fn.imgLoad = function(callback) {
return this.each(function() {
if(callback){
if(this.complete || (this.readyState === 4) || (this.readyState === 'complete')) {
callback.apply(this);
} else {
$(this).one('load.imgCallback', function(){
callback.apply(this);
});
}
}
});
}
Это объединяет проверку всех возможных событий в одно (как кэшированное, так и не кэшированное), но также делает метод цепным.Вы можете позвонить с помощью:
$('img').imgLoad(function(){
console.log('loaded');
});
Работает кросс-браузер, обратно в IE6.Обратите внимание, что сначала проверяется кэширование, а если нет, то запускается событие загрузки в пространстве имен только один раз, чтобы предотвратить повторные загрузки в случае, если вы вызываете функцию с этой логикой дважды, но также и для разрешения привязки пользовательских событий загрузки (если применимо).