2012-04-12 7 views
12

Tengo este fragmento de código que recorre una matriz y carga imágenes, y notifica cuando se cargan las imágenes.Javascript Enlace de evento de carga de imagen

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

} 

Funciona bien. Sin embargo, si intento hacer esto, no funcionará

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

¿Cuál es el problema? ¿Y hay alguna forma de evitar el cierre en este caso?

+0

No es el único problema, pero su segundo ejemplo roto está claramente roto JS, falta 'i) {' al final de la primera línea. – Lambart

+0

Solo para estar seguro, ¿no debería primero asignar el evento y luego asignar el src? – bashan

Respuesta

21

Una parte del problema: El evento no se llama onload, pero load.

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

Aparte de eso, desde i cambios fuera de la función de detector de eventos, se necesita un cierre.

+1

@gillesc Una matriz ES5 normal. ForEach() le dará un nuevo alcance, por lo que sus enlaces no siempre se establecen en el último elemento. Será menos código que iterar a través de los índices y agregar tu propio cierre también. – mikemaccana

Cuestiones relacionadas