2010-06-24 11 views
6

Tengo una página que fadeIn y fadeOut un elemento en línea y jQuery no funciona. Y luego, cuando cambio las herramientas de desarrollador para usar el modo de navegador de IE 7, se muestran los efectos fadeIn() y fadeOut().¿FadeIn() y fadeOut() de jQuery no funcionan con IE 8?

+0

Funciona para mí. ¿Es válido el marcado HTML? Si no es así, IE hace las cosas de la manera en que 'IT' piensa que es lo mejor, lo que generalmente es incorrecto. (contra el uso de estándares) – Aren

Respuesta

6

IE tiene un detalle de implementación conocido como "hasLayout" que, por desgracia, a menudo se escapa de la abstracción de la API y debe tratarse de frente ... Esta es la batalla que enfrenta hoy: los elementos en línea generalmente no tendrán "diseño" y por lo tanto no funcionará con "filtros" ... que es lo que jQuery usa para simular la opacidad en IE.

Esto no es nuevo en IE8, y normalmente no tendrías que preocuparte por nada, ya que es exactamente este tipo de locura específica del navegador que jQuery tiene la intención de asumir. De hecho, es por eso que No me molesto en entrar en detalles sobre lo que realmente significan "hasLayout" y "filters": probablemente no le importe, y no debería tener que hacerlo (pero, si le interesa, googlearlo ...)

El problema es que el hack que jQuery usa debajo del capó para forzar el diseño (por lo que los filtros funcionan (para que pueda simular la opacidad (ya que IE no lo implementa))) ... no funciona en IE8. No es que simplemente genial, ¿eh? Solucionaron el error por el cual los elementos display: inline se comportaban como elementos display: inline-block, pero descuidaron la implementación de la característica de que la gente estaba usando su error para hackear en soporte ...

Bueno, nada que puedas hacer al respecto. Escribir un desagradable correo electrónico a Team IE puede hacerte sentir un poco mejor, pero están trabajando duro en IE9, que debería (tocar la madera ...) solucionar la mayoría de estos problemas. Mientras tanto, sólo tendrá que hacer manualmente lo que IE utiliza que ver (poco, sorta, y sin duda incorrectamente) por sí mismo: fuerza el elemento en línea en modo inline-block:

$("myInlineElement").css({display: 'inline-block'}).faceOut(); 

... o mejor aún, put it in an IE8-only stylesheet ...

Cuestiones relacionadas