Вы можете установить обработчик для события «load».
$('img.whatever')
.load(function() { /* do stuff */ })
.attr('src', newURL);
На самом деле, я думаю, вы захотите сделать это с помощью «live ()»:
$('img.reloadable').live('load', function() { $(this).show(); });
// ...
$('img#someId').hide().attr('src', newURL);
edit - Вау, где этот год прошел?Что ж, получается, что одна проблема с этим «живым» подходом, который я набрал в обратном пути, это то, что событие «загрузки» не всплывает .Однако теперь вы можете использовать способ, которым ведут себя объекты «Изображение» (в отличие от <img>
элементов DOM).По сути, функция, которая изменяет URL, может использовать элемент «Image» в качестве места для хранения обработчика.Код, который изменяет фактический атрибут "src" тега real <img>
, также обновляет "src" экземпляра объекта "Изображение".Браузер действительно загрузит изображение только один раз (при условии, что управление кешем все круто), но браузер все равно вызовет обработчик «загрузки» «Изображение»:
(function() {
var imageObj = new Image();
imageObj.onload = function() {
// code to run when image loads from server
};
$('#hypotheticalButton').click(function() {
$('#imgToUpdate').attr('src', newURL);
imageObj.src = newURL;
});
})();