Як встановити за замовчуванням смугу прокрутки текстового поля внизу?


97

У мене є текстова область, яка динамічно перезавантажується під час надсилання вводу користувача. Вона оновлюється кожні пару секунд. Коли кількість тексту в цій області тексту перевищує розмір області тексту, з’являється смуга прокрутки. Однак смуга прокрутки насправді не придатна для використання, оскільки якщо ви почнете прокручувати вниз, через пару секунд текстове поле оновиться і поверне смужку прокрутки назад угору. Я хочу встановити смужку прокрутки за замовчуванням, щоб відображати самий нижній текст. Хтось має уявлення про те, як це зробити?


Відповіді:


190

досить просто, у ванільному javascript:

var textarea = document.getElementById('textarea_id');
textarea.scrollTop = textarea.scrollHeight;

Якщо ви щойно завантажили область тексту в той самий блок коду, це не працює. Щоб він працював коректно, помістіть цей код в окрему функцію, а потім зателефонуйте йому після того, як завантажите нове значення тексту. Тоді це буде працювати за бажанням.
blissweb

55

Ви можете використовувати це з jQuery

$(document).ready(function(){
    var $textarea = $('#textarea_id');
    $textarea.scrollTop($textarea[0].scrollHeight);
});

не дуже знайомий з jQuery. я б просто помістив це в ту ж область, що і javascript, чи мені потрібно створити новий елемент <script> і вказати новий тип?
moesef

1
і додати теги <script language = 'javascript' src = ' ajax.googleapis.com/ajax/libs/jquery/1.7.1/… > :)
Буде П.

8
Додавання широкої залежності від сайту просто для того, щоб зробити те, що ви можете зробити в простому JS, звучить як погана ідея. Те, що ти можеш, не означає, що ти повинен.
emix

0

У мене була та ж проблема, і я виявив, що немає атрибута, який можна було б спочатку встановити для отримання правильної поведінки прокрутки. Однак, після оновлення тексту в textArea, відразу після тієї ж функції ви можете встановити focus () на textArea, щоб прокрутити його донизу. Потім ви можете зателефонувати focus()в якесь інше поле введення, щоб дозволити користувачеві вводити в це поле. Це працює як шарм:

function myFunc() {
    var txtArea = document.getElementById("myTextarea");
    txtArea.value += "whatever"; // doesn't matter how it is updated
    txtArea.focus();
    var someOtherElem = document.getElementById("smallInputBox");
    someOtherElem.focus();
}

0

У вашому HTML ...

<textarea id="logTextArea" style="width:600px;height:200px;"></textarea>

У вашому Javascript ...

<script language="javascript">

    function loadLog(logValue) {
        logTa = document.getElementById("logTextArea")
        logTa.value = logValue;
        scrollLogToBottom()
    }

    function scrollLogToBottom() {
        logTa = document.getElementById("logTextArea")
        logTa.scrollTop = logTa.scrollHeight;
    }

    loadLog("This is my really long text block from a file ... ")

</script>

Я виявив, що вам потрібно помістити код, щоб встановити scrollHeight в окрему функцію після завантаження нового значення в текстову область.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.