2012-04-14 9 views
5

C'è un modo per impostare il cursore alla fine in un tag TEXTAREA? Sto usando Firefox 3.6 e non ne ho bisogno per funzionare in IE o Chrome. JavaScript è ok ma sembra che tutte le risposte correlate qui usano l'evento onfocus(), che sembra essere inutile perché quando l'utente fa clic in qualsiasi punto all'interno di textarea, Firefox imposta la posizione del cursore a tale posizione. Ho un lungo testo da visualizzare in una textarea in modo che mostri l'ultima porzione (rendendo più facile aggiungere qualcosa alla fine).Come impostare il cursore alla fine in TEXTAREA? (non usando jQuery)

risposta

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

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

Il trucco sta usando il setTimeout di modificare l'inserimento di testo (carati) posizione dopo il browser è fatto la gestione dell'evento di messa a fuoco; altrimenti la posizione verrebbe impostata dal nostro script e quindi immediatamente impostata su qualcos'altro dal browser.

5

E 'passato molto tempo da quando ho usato javascript senza prima ricerca di una soluzione jQuery ...

Detto questo, il tuo approccio migliore utilizzando JavaScript sarebbe per afferrare il valore attualmente nella textarea quando viene messo a fuoco e imposta il valore della textarea sul valore afferrato. Questo funziona sempre in jQuery come:

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

in JavaScript pianura:

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

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

potrei sbagliarmi. Un po 'arrugginito

+0

Mi piace questa soluzione perché è solo 2 righe di codice, ma penso che sia più intenso lavoro di soluzione Starx . –

3

Ecco una funzione per quel

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; 
    }); 
}; 
Problemi correlati