2010-06-24 12 views
6

Mam stronę, która zanikuje i fadeOut element inline i jQuery nie działa. A potem, kiedy zmieniam Narzędzia programistyczne, aby korzystać z trybu przeglądarki IE 7, pojawią się efekty fadeIn() i fadeOut().Czy funkcje fadeIn() i fadeOut() jQuery nie działają z IE 8?

+0

Działa dla mnie. Czy Twój znacznik HTML jest prawidłowy? Jeśli nie, to IE robi rzeczy, o których myśli "najlepiej", co zwykle jest złe. (w porównaniu do standardów) – Aren

Odpowiedz

6

IE ma szczegół implementacji znany jako "hasLayout", który, niestety, często przecieka po abstrakcji API i musi być traktowany z czołówką ... To jest bitwa, którą napotykasz dzisiaj: elementy inline ogólnie nie będą miały "layout", a zatem nie będzie działać z "filtrami" ... które są używane przez jQuery do symulacji krycia w IE.

To nie jest nowość w IE8 i normalnie nie musiałbyś się o to martwić, ponieważ jest to dokładnie ten rodzaj szaleństwa specyficznego dla przeglądarki, który jQuery ma zamiar wydrukować ... Rzeczywiście, dlatego właśnie "Nie zawracam sobie głowy szczegółami dotyczącymi tego, co właściwie mają" hasLayout "i" filtry "- prawdopodobnie nie obchodzi cię to i nie powinno być (ale, jeśli jesteś zainteresowany, google to ...)

Problem polega na tym, że hack, który jQuery używa pod maską, wymusza układ (tak działa filtr (aby mógł symulować nieprzezroczystość (ponieważ IE go nie implementuje))) ... nie działa na IE8. Czy to nie jest wspaniałe, prawda? Naprawiono błąd przy czym display: inline elementy zachowywały się jak display: inline-block elementów, ale zaniedbane wdrożyć tę cechę, że ludzie byli przy użyciu ich błąd włamać wsparcie dla ...

dobrze, nic nie można zrobić tego. Napisanie paskudnego e-maila do Team IE może sprawić, że poczujesz się trochę lepiej, ale ciężko pracują nad IE9, który powinien (zapukać do drewna ...) naprawić większość z tych problemów. W międzyczasie, to po prostu trzeba to zrobić ręcznie, co IE wykorzystywane zrobić (trochę, jakoś, a większość na pewno niepoprawnie) wszystko sama: wymusić elementu liniowego w trybie inline-block:

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

... lub jeszcze lepiej, put it in an IE8-only stylesheet ...