Динамически прокрутки в textarea в
У меня есть элемент textarea html на моей странице, который перезагружается через ajax. Весь textarea возвращается каждый раз не только его содержание, и содержание растет с течением времени. Вместе с 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 это было бы нормально, как у меня есть доступ к этому.
спасибо заранее
Нил
4 ответов
как быстрый Хак вы можете просто сделать это:
textArea.scrollTop = 99999;
другой вариант-попробовать его в таймер:
setTimeout(function()
{
var textArea = document.getElementById('outputTextResultsArea');
textArea.scrollTop = textArea.scrollHeight;
}, 10);
используя jQuery, $("textarea").scrollHeight (99999) отлично работает в Firefox и Chrome, но не в IE. Похоже, что он устанавливает максимальное количество строк в текстовом поле, тогда как scrollHeight должен быть количеством пикселей. (Удивительное шоу отличная работа IE). Это, кажется, работает, хотя:
$("textarea").scrollTop(99999)
$("textarea").scrollTop($("textarea").scrollTop()*12)
Я думаю, что это предполагает высоту шрифта 12px. Мне хотелось бы найти более надежный/простой способ сделать это.
вместо использования тайм-аута, вызовите эту функцию на каждом ответе AJAX-при условии, что вы можете настроить его.
это освободит ваш браузер от ненужных тайм-аутов.
Я закончил использовать это для Internet Explorer:
textArea.createTextRange().scrollIntoView(false);
и это для других браузеров:
textArea.scrollTop = textArea.scrollHeight;