Necesito obtener las dimensiones de una imagen, usando una etiqueta de imagen creada dinámicamente. Funciona. SÓLO usando attr ('ancho') y SÓLO si NO agrego la imagen al DOM. De lo contrario, las dimensiones devueltas son cero. ¿Por qué? :)jQuery: la nueva imagen añadida a DOM siempre tiene el ancho 0 después de cargar
this.img = $('<img/>', {'src': e.url}); // generate image
this.img.appendTo('body'); // add to DOM
this.img.load(function(self){return function(){ // when loaded call function
console.log(self.img.attr('src'));
console.log(self.img.attr('width'));
console.log(self.img.width());
console.log(self.img.css('width'));
}; }(this)); // pass object via closure
Así que generan la imagen, agregarlo a la DOM y definir una función de controlador que se llamará cuando se carga la imagen. Estoy usando un cierre para pasarle una referencia al objeto original, llamado "yo" dentro del cierre. Estoy volcando la URL de la imagen para asegurarme de que la referencia sea correcta. La salida es:
pic.jpg
0
0
0px
Ahora aquí es lo extraña: si quito la segunda línea de arriba (la appendTo), entonces funciona de repente, pero sólo para attr ('ancho'):
pic.jpg
1024
0
0px
Este comportamiento no tiene ningún sentido para mí. Esperaría obtener el tamaño de imagen real en los seis casos anteriores. Ahora sé cómo solucionar el problema, pero me gustaría entender por qué sucede. ¿Es un error? ¿O hay alguna razón lógica para ello?
Los resultados anteriores son para Safari. Acabo de probar con Chrome y obtuve todos los valores correctos en el primer ejemplo, pero todavía dos ceros en el segundo ejemplo. Muy raro.
¿estás seguro de que siempre tienes e.url válido? – kobe
@travel boy puede dar otro nombre a esta variable en lugar de img this.img, this.newImgSource o así ... /// – kobe
@travelboy & gov: de acuerdo, la propiedad que contiene el objeto jQuery para la imagen debe cambiarse como img es un nombre de etiqueta, solo buenas prácticas. – UpHelix