Динамическая прокрутка текстовой области

У меня есть элемент textarea html на моей странице, который перезагружается через ajax. Вся текстовая область возвращается каждый раз не только ее содержимое, а контент со временем увеличивается. Наряду с textarea я возвращаю следующий фрагмент javascript:

<script type="text/javascript" >

var textArea = document.getElementById('outputTextResultsArea');
textArea.scrollTop = textArea.scrollHeight;
</script>

В firefox 3.0.7 это помещает полосу прокрутки в нижней части textArea, позволяя мне увидеть последний результат. Однако в IE 7 я вижу другое поведение. Полоса прокрутки перемещается вниз с содержимым, как предполагалось, но как только содержимое больше, чем высота текстовой области, полоса прокрутки больше не перемещается вниз. Кажется, что IE помнит исходную высоту прокрутки элемента, а не новую высоту.

Я использую переходный doctype xhtml, если это помогает. Также, если это может быть достигнуто с помощью jQuery, это будет нормально, поскольку у меня есть доступ к этому.

Заранее спасибо

Neil

Ответы

Ответ 1

В качестве быстрого взлома вы можете просто сделать это:

textArea.scrollTop = 99999;

Другой вариант - попробовать его в таймере:

setTimeout(function()
{
    var textArea = document.getElementById('outputTextResultsArea');
    textArea.scrollTop = textArea.scrollHeight;
}, 10);

Ответ 2

Использование jQuery, $( "textarea" ). scrollHeight (99999) отлично работает на Firefox и Chrome, но не на IE. Кажется, он устанавливает максимальное количество строк в текстовом поле, тогда как scrollHeight должно быть числом пикселей. (Awesome показать отличную работу IE). Кажется, что это работает:

      $("textarea").scrollTop(99999)
      $("textarea").scrollTop($("textarea").scrollTop()*12)

Я думаю, что это предполагает высоту шрифта 12px. Я хотел бы найти более надежный/простой способ сделать это.

Ответ 3

Вместо использования таймаута вызовите эту функцию при каждом ответе AJAX - при условии, что вы можете настроить его.

Это освободит ваш браузер от лишних тайм-аутов.

Ответ 4

В результате я использовал Internet Explorer:

textArea.createTextRange().scrollIntoView(false);

и для других браузеров:

textArea.scrollTop = textArea.scrollHeight;