Làm cách nào để đặt thanh cuộn textarea xuống dưới cùng làm mặc định?


97

Tôi có một vùng văn bản đang được tải lại động khi dữ liệu nhập của người dùng đang được gửi đến. Nó tự làm mới mỗi vài giây. Khi lượng văn bản trong vùng văn bản này vượt quá kích thước của vùng văn bản, một thanh cuộn sẽ xuất hiện. Tuy nhiên, thanh cuộn không thực sự có thể sử dụng được vì nếu bạn bắt đầu cuộn xuống, một vài giây sau vùng văn bản sẽ làm mới và đưa thanh cuộn ngay lên trên cùng. Tôi muốn đặt thanh cuộn theo mặc định hiển thị phần lớn văn bản dưới cùng. Bất cứ ai có một ý tưởng về cách làm như vậy?


Câu trả lời:


190

khá đơn giản, trong javascript vani:

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

Nếu bạn vừa tải vùng văn bản trong cùng một khối mã, điều này không hoạt động. Để làm cho nó hoạt động chính xác, hãy đặt mã này trong một hàm riêng và sau đó gọi nó sau khi bạn đã tải giá trị vùng văn bản mới. Sau đó, nó sẽ hoạt động như mong muốn.
Blissweb

55

Bạn có thể sử dụng điều này với jQuery

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

không thực sự quen thuộc với jQuery. Tôi sẽ đặt nó vào cùng một khu vực với javascript hay tôi cần tạo một phần tử <script> mới và chỉ định một kiểu mới?
moesef

1
và thêm thẻ <script language = 'javascript' src = ' ajax.googleapis.com/ajax/libs/jquery/1.7.1/… > :)
Sẽ P.

8
Thêm sự phụ thuộc vào toàn bộ trang web chỉ để làm điều gì đó bạn có thể làm trong JS đơn giản nghe có vẻ là một ý tưởng tồi. Chỉ vì bạn có thể không có nghĩa là bạn nên làm.
emix

0

Tôi đã gặp vấn đề tương tự và phát hiện ra rằng không có thuộc tính nào có thể được đặt ban đầu để có được hành vi cuộn phù hợp. Tuy nhiên, khi văn bản được cập nhật trong textArea, ngay sau khi trong cùng một hàm, bạn có thể đặt tiêu điểm () thành textArea để làm cho nó cuộn xuống dưới cùng. Sau đó, bạn cũng có thể gọi focus()một số trường nhập khác để cho phép người dùng nhập vào trường đó. Điều này hoạt động giống như sự quyến rũ:

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

Trong HTML của bạn ...

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

Trong Javascript của bạn ...

<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>

Tôi nhận thấy rằng bạn cần đặt mã để đặt scrollHeight thành một chức năng riêng biệt sau khi tải giá trị mới vào vùng văn bản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.