Использование события jquery load
для загрузки изображений может быть немного ошибочным (взято из документации jquery ):
- Он не работает согласованно и надежно кросс-браузер
- Он не срабатывает корректно в WebKit, если для src изображения установлено то же значение src, что и раньше
- Не правильно всплывает дерево DOM
- Может перестать срабатывать для изображений, которые уже находятся в кэше браузера.
В вашем случае я бы использовал один из двух разных подходов:
С помощью обратных вызовов у вас есть возможность выполнить некоторые функции, когда асинхронная задача выполнена:
function loadImage(id,callback){
var $url='url/'+id;
var img = new Image();
$(img).load(function(){
if(typeof callback == 'function')
callback(this);
return this;
}).attr({'src':$url,'id':id});
}
for(var i = 0; i < r.length; i++){
var img=loadImage(r.id,function(_img){
$gallery.append(_img);
});
}
С событиями вы получаете еще больше силы ...
Вы можете создавать и запускать свои собственные события и связывать столько событий, сколько хотите.
Пример использования личных событий:
function loadImage(id){
var $url='url/'+id;
var img = new Image();
$(img).load(function(){
$(document).trigger('my_special_event',[this]);
}).attr({'src':$url,'id':id});
}
for(var i = 0; i < r.length; i++){
var img=loadImage(r.id);
}
$(document).bind('my_special_event',function(e,img){
$gallery.append(img);
});