Как предотвратить прокрутку текстовой области до вершины при изменении ее значения? - PullRequest
3 голосов
/ 28 августа 2011

Рассмотрим следующий пример: ( Демонстрация здесь )

HTML:

<textarea></textarea>
<div id="button">Click Here</div>

CSS:

textarea {
    height: 80px;
    width: 150px;
    background-color: #bbb;
    resize: none;
    border: none;
}
#button {
    width: 150px;
    background-color: #333;
    color: #eee;
    text-align: center;
}

JS:

$(function() {
    var textarea = $("textarea");

    textarea.val("Hello\nStack\nOverflow!\nThere\nAre\nLots\nOf\nGreat\nPeople\nHere");

    $("#button").click(function() {
        textarea.val(textarea.val() + "!");
    });

    textarea.scrollTop(9999).focus(); // Arbitrary big enough number to scroll to the bottom
});

При нажатии #button значение textarea изменяется, и по какой-то причине полоса прокрутки идет вверх (я проверял это в Firefox, не уверен в других браузерах).

Почему это происходит?

Как я могу это исправить?

Я нашел здесь одно возможное решение, но мне интересно, есть ли другие решения.

Ответы [ 2 ]

9 голосов
/ 28 августа 2011

Вы можете сохранить смещение scrollTop, установить значение и сбросить scrollTop к старому смещению:

var $textarea = ...;
var top = $textarea.scrollTop();
$textarea.val('foo');
$textarea.scrollTop(top);

Попробуйте здесь: http://jsfiddle.net/QGJeE/7/

1 голос
/ 28 августа 2011

Другое решение (сложнее понять, поскольку не существует уникального кросс-браузерного пути):

Вместо изменения значения textarea создайте textRange содержимого textarea и измените текст диапазонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...