Wie setze ich die Textbereich-Bildlaufleiste standardmäßig auf den unteren Rand?


90

Ich habe einen Textbereich, der dynamisch neu geladen wird, während Benutzereingaben gesendet werden. Er aktualisiert sich alle paar Sekunden. Wenn die Textmenge in diesem Textbereich die Größe des Textbereichs überschreitet, wird eine Bildlaufleiste angezeigt. Die Bildlaufleiste ist jedoch nicht wirklich verwendbar, da der Textbereich einige Sekunden später aktualisiert wird, wenn Sie mit dem Bildlauf nach unten beginnen, und die Bildlaufleiste wieder ganz nach oben bringt. Ich möchte die Bildlaufleiste so einstellen, dass standardmäßig der unterste Text angezeigt wird. Hat jemand eine Idee, wie das geht?


Antworten:


182

ziemlich einfach, in Vanille-Javascript:

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

53

Sie können dies mit jQuery verwenden

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

nicht wirklich vertraut mit jQuery. Würde ich dies einfach in den gleichen Bereich wie Javascript stellen oder muss ich ein neues <script> -Element erstellen und einen neuen Typ angeben?
Moesef

1
und füge <script language = 'javascript' src = ' ajax.googleapis.com/ajax/libs/jquery/1.7.1/… > Tags hinzu :)
Will P.

8
Das Hinzufügen einer standortweiten Abhängigkeit, um etwas zu tun, das Sie in einfachem JS tun können, klingt nach einer schlechten Idee. Nur weil du kannst, heißt das nicht, dass du es solltest.
Emix

0

Ich hatte das gleiche Problem und fand heraus, dass es kein Attribut gibt, das anfänglich festgelegt werden kann, um das richtige Bildlaufverhalten zu erzielen. Sobald der Text jedoch in textArea aktualisiert wurde, können Sie unmittelbar danach in derselben Funktion den Fokus () auf textArea setzen, damit er nach unten scrollt. Sie können dann auch focus()ein anderes Eingabefeld aufrufen , damit der Benutzer in dieses Feld eingeben kann. Das funktioniert wie Charme:

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();
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.