2012-06-27 9 views
6

estoy usando un código que se parece a lo siguiente:retorno jquery.width 0 en la imagen

img.load(function(){ 
    // do some stuff 
    $(this).width(); 

}); 

En mi devolución de llamada del tamaño de la imagen es siempre 0. Podría tener algo que ver con él, pero mis imágenes son cargado localmente

Pero en verdad, si hago this.width, obtendré el ancho esperado y luego puedo hacer algún tipo de cálculo desde aquí para cambiar mi ventana de extjs.

Después de algunos intentos, me doy cuenta de que si hago $ (esto), todos los atributos que cambio no parecen tener ningún efecto en absoluto.

haciendo $(this).width(40); no cambiará el ancho de mi imagen pero al hacer this.width = 40 cambiaré el ancho de mi imagen. Es como si al hacer $(this) estuviera copiando mi HTMLImageElement dentro de un nuevo elemento y esos cambios se aplicarían solo si añadí al dom nuevamente para reemplazar el viejo.

No estoy tan seguro de entender lo que está pasando allí.

Editar

Esto es lo que mi img variable contiene.

img = $('<img>'); 
img.attr('src', '....image'); 

Editar 2

Esto no cambia el hecho de que jQuery no maneja tamaño de la imagen en imágenes de memoria pero sentí que sería bueno para cualquier persona que utilice Extjs para no repetir mi error. Uno de los grandes problemas en mi caso es que el objeto img que utilicé era un objeto válido, pero dado que estoy usando ExtJs, inadvertidamente cometí un error estúpido. He creado mi ventana de esa manera ...

Ext.create('Ext.Window', 
    // some settings 
    items: [{ 
     html: img.wrap('<div>').parent().html(), 
    // etc 

En otras palabras, el evento que creé fue el img, pero realmente nunca se añadió img al DOM. ExtJs agregó texto html al DOM que creó un nuevo objeto que no puede modificarse a través del evento, etc.

Así que tengo que crear una identificación para encontrar el nuevo elemento y todo esto tiene que hacerse después de que se realiza una llamada a modalWindow.show(). Después de eso, todo funciona a la perfección.

Para cambiar el tamaño de la ventana, si las dimensiones están configuradas, puede establecerlas de nuevo en null y hacer una llamada doLayout en la ventana y volverá a calcular Windowsize.

+1

¿Puede publicar HTML asociado? Además, no necesitaría jQuery para esto. Debería poder acceder a la propiedad en javascript directo – pixelbobby

+1

¿Cuál es exactamente el valor de la variable 'img' en ese código? ¿Cómo se configura, en otras palabras? – Pointy

+0

El primer parámetro de ['.load()'] (http://api.jquery.com/load/) debe ser la URL que desea cargar, luego la función completa. ¿Qué es 'img'? – sachleen

Respuesta

3

Descubriste que jQuery(this).width() no funciona para las imágenes en la memoria. Las opciones son usar this.width/height o anexarlo a la página y leerlo.

+0

así que estoy atascado con el uso de this.width y this.height ya que no puedo agregarlo a la página otra vez? –

+0

Sí, necesita usar this.width, puede usar attr() si realmente lo desea. No es un gran problema aquí. – epascarello

+0

Supongo que sí, vi un comentario en jQuery.width que data de hace un año que dice lo mismo. Es una especie de comportamiento extraño. Debe tener algo que ver con el diseño y cómo se calcula la dimensión, pero una imagen realmente no depende de nada más que ella y css –

3

Creo que deberías probar este ...

$("img").load(function(){ 
    // do some stuff 
    $(this).width(); 

}); 

suponiendo que sólo está utilizando una etiqueta img. en caso de que si tiene la identificación de la etiqueta img, entonces debe usar, por ejemplo, $ ("# idimg) .load (diversión ...... cont.)

+0

estoy creando la etiqueta –

Cuestiones relacionadas