2011-01-17 19 views
16

Tengo un área de texto y cuando hago clic en él quiero mover el cursor hasta el último carácter por lo Something[caret]Javascript: Mover cursor al último carácter

function moveCaret(){ 
    // Move caret to the last character 
} 
<textarea onclick="moveCaret();"> 
    Something 
</textarea> 

Como sé que esto es de alguna manera es posible con el objeto TextRange, pero realmente no sé cómo usarlo

EDIT: Me encantaría ver solo soluciones puras de javascript, por lo que no hay bibliotecas.

+7

Por favor, no hacer eso . Es ** molesto como el infierno ** si los campos de texto hacen cosas así. Si hago clic en una posición determinada, espero que el cursor esté en esta posición; no en alguna posición que le gustó al desarrollador del sitio. La selección automática de todos los contenidos es más aceptable siempre y cuando ocurra inmediatamente al enfocarlo. – ThiefMaster

+0

@ThiefMaster, estuvo de acuerdo, aunque a veces hay cosas raras que requieren un control preciso. Por ejemplo, un relleno de relleno que trata el texto de marcador ficticio como si no existiera. – KyleMit

Respuesta

40

La siguiente función funcionará en todos los navegadores, tanto para las áreas de texto y entradas de texto:

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(); 
    } 
} 

Sin embargo, realmente no debería hacer esto cada vez que el usuario hace clic en el área de texto, ya que el usuario no lo hará ser capaz de mover el cursor con el mouse. En cambio, hazlo cuando el área de texto reciba el foco. También hay un problema en Chrome, que puede ser trabajado alrededor de la siguiente manera:

ejemplo completo: http://www.jsfiddle.net/ghAB9/3/

HTML:

<textarea id="test">Something</textarea> 

Guión:

var textarea = document.getElementById("test"); 
textarea.onfocus = function() { 
    moveCaretToEnd(textarea); 

    // Work around Chrome's little problem 
    window.setTimeout(function() { 
     moveCaretToEnd(textarea); 
    }, 1); 
}; 
+0

no funciona en IE9 – vsync

+0

@vsync: Acabo de probar el ejemplo jsFiddle en IE 9 y funcionó bien. ¿Qué problema estás viendo? –

+0

ho mi mal! lo siento, funciona bien :) – vsync

Cuestiones relacionadas