2010-06-24 3 views
6

J'ai une page qui fadeIn et fadeOut un élément en ligne et jQuery ne fonctionne pas. Et puis, lorsque je change les outils de développement pour utiliser le mode navigateur d'Internet Explorer 7, les effets fadeIn() et fadeOut() s'affichent.Est-ce que fadeIn() et fadeOut() de jQuery ne fonctionnent pas avec IE 8?

+0

Fonctionne pour moi. Votre balisage html est-il valide? Si ce n'est pas le cas, IE fait les choses comme "IT" pense le mieux, ce qui est généralement faux. (vs en utilisant des normes) – Aren

Répondre

6

IE a un détail d'implémentation connu sous le nom de "hasLayout" qui, malheureusement, fuit souvent l'abstraction de l'API et doit être traité de front ... C'est la bataille que vous affrontez aujourd'hui: les éléments en ligne n'auront généralement pas "layout" et donc ne fonctionnera pas avec "filtres" ... qui sont ce que jQuery utilise pour simuler l'opacité sur IE.

Ce n'est pas nouveau dans IE8, et normalement vous ne devriez pas vous inquiéter du tout puisque c'est exactement ce genre de folie spécifique au navigateur que jQuery est destiné à recouvrir ... En effet, c'est pourquoi je Je ne prends pas la peine d'entrer dans les détails sur ce que "hasLayout" et "filters" signifient réellement - vous ne vous en souciez probablement pas, mais vous ne devriez pas le faire (mais, si vous êtes intéressé, google it ...)

Problème, le hack que jQuery utilise sous le capot pour forcer la mise en page (donc les filtres fonctionnent (donc ça peut simuler l'opacité (puisque IE ne l'implémente pas))) ... ça ne marche pas sur IE8. N'est-ce pas que juste génial, hein? Ils ont corrigé le bug par lequel les éléments display: inline se comportaient comme display: inline-block éléments, mais ont négligé d'implémenter la fonctionnalité que les gens utilisaient leur bogue pour pirater le support de ...

Eh bien, rien de ce que vous pouvez faire à ce sujet. Écrire un email désagréable à Team IE pourrait vous faire vous sentir un peu mieux, mais ils travaillent dur sur IE9, qui devrait (frapper sur bois ...) résoudre la plupart de ces problèmes. En attendant, vous avez juste à faire manuellement ce que IE utilisé faire (un peu, sorta, et très certainement à tort) par lui-même: force l'élément en ligne en mode inline-block:

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

... ou mieux encore, put it in an IE8-only stylesheet ...

Questions connexes