2011-02-17 23 views
14

Tengo un elemento <img> y estoy cambiando su atributo src. El elemento tiene una función de controlador onload adjunta. Cada vez que cambio el atributo src y la imagen se carga, la función del controlador debe ejecutarse.javascript, image onload() no se activa en webkit si se carga la misma imagen

En Chrome y Safari, si asigno el mismo src que el anterior, la función del controlador no se ejecuta. Antes de asignar el mismo código que antes, he intentado imgElement.src='', imgElement.src= null, imgElement.src='notExistingFile.jpg' y nada de eso funciona.

Por favor ayuda. ¿Alguien tuvo este problema antes?

Editar: funcionó haciendo imgElement.src = '' antes de asignar la misma src como antes:

imgElement.src = ''; 
imgElement.src = 'image.jpg'; 
+2

+1 para la solución imgElement.src = '' más simple. Esto descargó la imagen correctamente y permitió a onload() disparar nuevamente. – ricosrealm

Respuesta

14

Esta es una known bug. Aquí está la solución de ese enlace:

Esto no es un error. WebKit es simplemente más estricto. Usted debe crear una instancia de un nuevo Image() objeto antes de la sustitución, así:

var photo = document.getElementById('image_id'); 
var img = new Image(); 
img.addEventListener('load', myFunction, false); 
img.src = 'http://newimgsource.jpg'; 
photo.src = img.src; 
+0

gracias ... funcionó! – bogdan

+1

me tonto ... también funcionó al hacer imgElement.src = '' antes de asignar el mismo src que antes ... pasé por alto que tenía dos lugares donde tenía que hacerlo – bogdan

3

Creo que su problema aquí es que está asignando el proceso de carga después de cambiar el valor de src, por lo que una vez que la imagen ya se ha cargado en el caché, el navegador lo carga antes de la asignación del evento. Significa que en lugar de hacer esto:

myImageObject.src = "something.png"; 
myImageObject.onload = myCallback; 

hacer esto:

myImageObject.onload = myCallback; 
myImageObject.src = "something.png"; 
+0

Tenía este problema en IE y de hecho estaba asignando primero, el src ... hizo lo que dijo y lo arregló ... ¡gracias! – bogdan

-1

Para añadir a la respuesta de Matt Ball, considere img.onload en lugar de img.addEventListener().

var photo = document.getElementById('image_id'); 
var img = new Image(); 
img.onload = myFunction; 
img.src = 'http://newimgsource.jpg'; 
photo.src = img.src; 

img.onload es más fácil de leer y funciona mejor entre los agentes de usuario.

+0

http://stackoverflow.com/questions/6348494/addeventlistener-vs-onclick – anneb

Cuestiones relacionadas