2012-04-14 29 views
5

Có cách nào để đặt con trỏ ở cuối thẻ TEXTAREA không? Tôi đang sử dụng Firefox 3.6 và tôi không cần nó để làm việc trong IE hoặc Chrome. JavaScript là ok nhưng có vẻ như tất cả các câu trả lời liên quan ở đây sử dụng sự kiện onfocus(), dường như vô ích bởi vì khi người dùng nhấp vào bất cứ nơi nào trong văn bản, Firefox đặt vị trí con trỏ tới đó. Tôi có một văn bản dài để hiển thị trong một textarea để nó hiển thị phần cuối cùng (làm cho nó dễ dàng hơn để thêm một cái gì đó ở cuối).Làm cách nào để đặt con trỏ ở cuối trong TEXTAREA? (bằng cách không sử dụng jQuery)

Trả lời

1
var t = /* get textbox element */ ; 

t.onfocus = function() { 
    t.scrollTop = t.scrollHeight; 
    setTimeout(function(){ 
     t.select(); 
     t.selectionStart = t.selectionEnd; 
    }, 10); 
} 

Bí quyết là sử dụng setTimeout để thay đổi chèn văn bản (carat) vị trí sau trình duyệt được thực hiện xử lý các sự kiện tập trung; nếu không vị trí sẽ được thiết lập bởi kịch bản của chúng tôi và sau đó ngay lập tức thiết lập để cái gì khác bởi trình duyệt.

5

Nó được một thời gian dài kể từ khi tôi sử dụng javascript mà không nhìn vào một giải pháp jQuery ...

Điều đó đang được nói, phương pháp tốt nhất bằng cách sử dụng javascript sẽ được lấy giá trị hiện tại trong vùng văn bản khi nó đi vào tiêu điểm và đặt giá trị của vùng văn bản thành giá trị được lấy. Đây luôn luôn làm việc trong jQuery như:

$('textarea').focus(function() { 
    var theVal = $(this).val(); 
    $(this).val(theVal); 
}); 

Trong javascript đơn giản:

var theArea = document.getElementByName('[textareaname]'); 

theArea.onFocus = function(){ 
    var theVal = theArea.value; 
    theArea.value = theVal; 
} 

Tôi có thể sai. Bit gỉ.

+0

Tôi thích giải pháp này vì nó chỉ có 2 dòng mã, nhưng tôi nghĩ rằng nó là một công việc chuyên sâu hơn giải pháp Starx . –

3

Đây là một chức năng cho rằng

function moveCaretToEnd(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = el.value.length; 
    } else if (typeof el.createTextRange != "undefined") { 
     el.focus(); 
     var range = el.createTextRange(); 
     range.collapse(false); 
     range.select(); 
    } 
} 

[Demo][Source]

2
textarea.focus() 
textarea.value+=' ';//adds a space at the end, scrolls it into view 
1
(this.jQuery || this.Zepto).fn.focusEnd = function() { 
    return this.each(function() { 
     var val = this.value; 
     this.focus(); 
     this.value = ''; 
     this.value = val; 
    }); 
}; 
Các vấn đề liên quan