ScrollHeight в IE7 возвращает неправильное значение, если специально не указано перед использованием
Я работаю над классом Accordion для MooTools, который более удовлетворен тем, что мне нужно, но заметил, что в IE7 (который мне все еще нужно поддерживать) element.scrollHeight возвращает неправильное значение, если я специально не ссылаюсь на него раньше используй это. Например, у меня есть элемент с классами "container" и "collapsed" и следующие стили, скрытые со страницы:
.container {
overflow: hidden;
}
/* removed when made visible */
.collapsed {
left: -9999em;
position: absolute;
top: 0px;
}
Когда мне нужно отобразить этот элемент, я удаляю класс и вычисляю его scrollHeight. В большинстве браузеров это работает отлично. Однако в IE7 следующий код возвращает высоту, которая значительно меньше фактического элемента scrollHeight:
// remove the collapsed class
elem.removeClass('collapsed');
alert(elem.scrollHeight); // consistently '69px' across all accordion folds
Однако, если я сначала ссылаюсь на elem.scrollHeight, предупрежденный scrollHeight верен:
// remove the collapsed class
elem.removeClass('collapsed');
if (elem.scrollHeight) alert(elem.scrollHeight); // the scrollHeight is correct
Требуется ли IE7 еще несколько миллисекунд для правильного пересчета элемента scrollHeight или есть что-то еще в игре?
Благодарим за помощь!
Ответы
Ответ 1
См. эту таблицу.
Когда элемент не имеет полос прокрутки, IE делает scrollHeight равный фактической высоте содержимого; а не высоту элемент. scrollWidth является правильным, за исключением IE8, где его 5 пикселей выкл.
И scrollHeight помечен как "неправильный" для ie5-7.
Может быть, он будет работать с offsetHeight? Или вычислить его как-то из других свойств?
Также здесь упомянул, что...
Что бы вы ни делали, в IE доступ к свойствам не до загрузки тела уволен, иначе вы получите странные результаты.