デフォルトでテキストエリアのスクロールバーを下に設定するにはどうすればよいですか?


92

ユーザー入力が送信されるときに動的に再読み込みされるテキストエリアがあります。数秒ごとに更新されます。このtextarea内のテキストの量がtextareaのサイズを超えると、スクロールバーが表示されます。ただし、スクロールバーは実際には使用できません。下にスクロールを開始すると、数秒後にテキスト領域が更新され、スクロールバーが一番上に戻ります。スクロールバーをデフォルトで最下部のテキストを表示するように設定します。誰かがそうする方法についてのアイデアを持っていますか?


回答:


184

バニラのjavascriptではかなり単純です。

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

53

これを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/… >タグを追加します:)
Will P.

8
単純なJSで実行できることを実行するためだけにサイト全体の依存関係を追加することは、悪い考えのように思えます。できるからといって、そうすべきだという意味ではありません。
2016

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();
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.