2012-04-12 6 views
12

Mam więc ten fragment kodu, który przechodzi przez macierz i ładuje obrazy oraz powiadamia o załadowaniu obrazów.Zdarzenie związane ze zdarzeniem związanym ze zdarzeniem związanym z obrazem JavaScript

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); 

} 

Działa dobrze. Jednak jeśli spróbuję to zrobić, to nie zadziała

imageObj.addEventListener('onload', function(
    console.log(i, 'loaded'); 
}, false); 

Na czym polega problem? Czy jest jakiś sposób, aby w tym przypadku uniknąć stosowania zamknięcia?

+0

Nie jedyny problem, ale twój drugi uszkodzony przykład jest wyraźnie uszkodzony JS, brakuje 'i) {' na końcu pierwszej linii. – Lambart

+0

Aby być po bezpiecznej stronie, nie należy najpierw przypisać zdarzenia, a następnie przypisać src? – bashan

Odpowiedz

21

Jedna część problemu: zdarzenie nie jest nazywane onload, ale load.

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

Poza tym, ponieważ i zmiany poza funkcji nasłuchiwania zdarzeń, trzeba zamknięcie.

+1

@gillesc Normalna tablica ES5.forEach() daje nowy zakres, więc twoje powiązania nie zawsze są ustawione na ostatnim elemencie. Będzie to mniej kodu niż iterowanie poprzez indeksy i dodawanie własnego zamknięcia. – mikemaccana

Powiązane problemy