ฉันจะตั้งค่าแถบเลื่อน textarea ให้ด้านล่างเป็นค่าเริ่มต้นได้อย่างไร


97

ฉันมีพื้นที่ข้อความที่กำลังโหลดใหม่แบบไดนามิกเนื่องจากกำลังส่งข้อมูลเข้าของผู้ใช้มันจะรีเฟรชตัวเองทุกสองสามวินาที เมื่อจำนวนข้อความในพื้นที่ข้อความนี้เกินขนาดของพื้นที่ข้อความแถบเลื่อนจะปรากฏขึ้น อย่างไรก็ตามแถบเลื่อนไม่สามารถใช้งานได้จริงเพราะถ้าคุณเริ่มเลื่อนลงสองสามวินาทีต่อมาพื้นที่ข้อความจะรีเฟรชและนำแถบเลื่อนกลับขึ้นไปด้านบน ฉันต้องการตั้งค่าแถบเลื่อนให้โดยค่าเริ่มต้นแสดงข้อความด้านล่างสุด ใครมีความคิดว่าจะทำอย่างไร


คำตอบ:


190

ค่อนข้างง่ายในจาวาสคริปต์วานิลลา:

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

หากคุณเพิ่งโหลด textarea ในบล็อกโค้ดเดียวกันจะใช้ไม่ได้ เพื่อให้ทำงานได้อย่างถูกต้องให้ใส่รหัสนี้ในฟังก์ชันแยกต่างหากจากนั้นเรียกใช้หลังจากที่คุณโหลดค่า textarea ใหม่แล้ว จากนั้นก็จะทำงานตามที่ต้องการ
blissweb

55

คุณสามารถใช้สิ่งนี้กับ jQuery

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

ไม่ค่อยคุ้นเคยกับ jQuery ฉันจะใส่มันลงในพื้นที่เดียวกับจาวาสคริปต์หรือฉันต้องสร้างองค์ประกอบ <script> ใหม่และระบุประเภทใหม่
moesef

1
และเพิ่มแท็ก<script language = 'javascript' src = ' ajax.googleapis.com/ajax/libs/jquery/1.7.1/… > :)
Will P.

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 เป็นฟังก์ชันแยกต่างหากหลังจากโหลดค่าใหม่ลงในพื้นที่ข้อความ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.