2012-04-12 21 views
12

Bu nedenle, bir dizi arasında dolaşan ve görüntüleri yükleyen ve resimler yüklendiğinde bunu bildiren bir kod parçam var.Javascript Image onload olay bağlama

for (var i = 0; i < arr.length; i++) {     
    var imageObj = new Image(); 
    imageObj.src = url[i]; 
    imageObj.onload= (function(i){ 
       return function(){ 
        console.log(i, 'loaded'); 
       } 
      })(i); 

} 

İyi çalışıyor. Ancak, bunu yapmaya çalışırsam, bu sorun çalışmayacaktır. Sorun nedir? Bu durumda kapanmayı kullanmaktan kaçınmamın bir yolu var mı?

+0

Tek sorun değil, ikinci kırık örneğiniz, ilk satırın sonunda açık bir şekilde bozuk JS, eksik i) {'. – Lambart

+0

Sadece güvenli tarafta olmak için, önce olayı atamamalı ve daha sonra src'yi atamamalısınız. – bashan

cevap

21

Sorunun bir kısmı: Olay, onload, ancak load olarak adlandırılmaz. olay dinleyici işlevinin dışında Bunun dışında

imageObj.addEventListener('load', function() { /* ... */ }, false); 

, i beri değişiklikler, bir kapatma gerekir.

+1

@gillesc Normal bir ES5 array.forEach() size yeni bir kapsam sunacaktır, bu nedenle bağlarınız her zaman son öğeye ayarlanmaz. Dizinler arasında yinelemekten ve kendi kapanışınızı eklemekten daha az kod olacaktır. – mikemaccana