Не работают ли в jQuery fadeIn () и fadeOut () с IE 8? - PullRequest
5 голосов
/ 25 июня 2010

У меня есть страница с fadeIn и fadeOut встроенным элементом, и jQuery не работает. И затем, когда я изменяю Инструменты разработчика на использование режима браузера IE 7, тогда отображаются эффекты fadeIn () и fadeOut ().

1 Ответ

6 голосов
/ 25 июня 2010

В IE есть деталь реализации, известная как hasLayout, которая, к сожалению, часто пропускает абстракцию API и должна решаться в лоб ... Это битва, с которой вы сталкиваетесь сегодня: встроенных элементов обычно не будет "layout "и, следовательно, не будет работать с" фильтрами "... которые jQuery использует для имитации прозрачности в IE.

Это не ново в IE8, и обычно вам вообще об этом не нужно беспокоиться, поскольку именно такого рода безумие, связанное с браузером, jQuery предназначено для написания ... Действительно, это так.почему я не удосуживаюсь вдаваться в подробности о том, что на самом деле означают hasLayout и filters - вам, вероятно, все равно, и вам это не нужно (но, если вам интересно, Google это ...)

Проблема в том, что хак, который jQuery использует под капотом для принудительного размещения макета (поэтому работают фильтры (поэтому он может имитировать непрозрачность (поскольку IE не реализует это))) ... он не работает наIE8.Разве это просто замечательно, а?Они исправили ошибку, из-за которой элементы display: inline вели себя как элементы display: inline-block, но пренебрегали возможностью реализовать функцию, которую люди использовали для исправления ошибки в поддержку ...

Что ж, с этим ничего не поделаешьтот.Если вы напишете плохое электронное письмо в Team IE, вы можете почувствовать себя немного лучше, но они очень усердно работают над IE9, который должен (стучать по дереву ...) решить большинство из этих проблем.А пока вам нужно будет просто вручную выполнить то, что IE использовал (вроде, вроде, и, скорее всего, неправильно), само по себе: принудительно включить встроенный элемент в режим inline-block:

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

... или еще лучше, поместите его в таблицу стилей только для IE8 ...

...