¿Cuál es la mejor manera (y supongo que es la más simple) para colocar el cursor al final del texto en un elemento de texto de entrada a través de JavaScript, después de que se haya establecido el foco en el elemento?
javascript
Maní
fuente
fuente
Hay una manera simple de hacerlo funcionar en la mayoría de los navegadores.
Sin embargo, debido a las peculiaridades * de algunos navegadores, una respuesta más inclusiva se parece más a esto
Usando jQuery (para configurar el oyente, pero de lo contrario no es necesario)
Mostrar fragmento de código
Usando Vanilla JS (
addEvent
función de préstamo de esta respuesta )Mostrar fragmento de código
Extravagantes
Chrome tiene una peculiaridad extraña donde el evento de foco se dispara antes de que el cursor se mueva al campo; que arruina mi solución simple. Dos opciones para arreglar esto:
focus
amouseup
. Esto sería bastante molesto para el usuario a menos que aún mantuvieras un seguimiento del enfoque. No estoy realmente enamorado de ninguna de estas opciones.Además, @vladkras señaló que algunas versiones anteriores de Opera calculan incorrectamente la longitud cuando tiene espacios. Para esto, puede usar un número enorme que debería ser más grande que su cadena.
fuente
this.selectionStart = this.selectionEnd = 0;
Esto debería mover el foco antes de la primera letra del cuadro de entrada. Pero más bien, cuando depuré, ¡ni siquiera está cambiando el valor de selectionEnd y selectionStart! ¡Y tampoco lo mueves al primer personaje!selectionStart
ylength
devolvía un número menor en los espacios. Es por eso que uso10000
o cualquier otro número lo suficientemente grande en lugar dethis.value.length
(probado en IE8 e IE11)Prueba esto, me ha funcionado:
Para que el cursor se mueva hasta el final, la entrada debe tener el foco primero, luego, cuando se cambia el valor, irá al final. Si establece .value en el mismo, no cambiará en Chrome.
fuente
this.
delante de la entrada en las líneas 2, 3 y 4? Ya sabemos que eseinput
es el elemento de entrada. Usarthis
parece redundante. Buena solución de lo contrario!$input.focus().val($input.val());
Después de hackear esto un poco, encontré que la mejor manera era usar el
setSelectionRange
función si el navegador lo admite; si no, vuelva a usar el método en la respuesta de Mike Berrow (es decir, reemplace el valor por sí mismo).También estoy configurando
scrollTop
un valor alto en caso de que estemos en un desplazamiento verticaltextarea
. (Usar un valor alto arbitrario parece más confiable que$(this).height()
en Firefox y Chrome).Lo hice como un complemento jQuery. (Si no está utilizando jQuery, confío en que aún puede obtener la esencia lo suficientemente fácil).
He probado en IE6, IE7, IE8, Firefox 3.5.5, Google Chrome 3.0, Safari 4.0.4, Opera 10.00.
Está disponible en jquery.com como el complemento PutCursorAtEnd . Para su comodidad, el código para la versión 1.0 es el siguiente:
fuente
Esta función me funciona en IE9, Firefox 6.xy Opera 11.x
fuente
SCRIPT16389: Unspecified error.
He intentado lo siguiente con bastante éxito en Chrome
Resumen rápido:
Toma cada campo de entrada con el foco de la clase en él, luego almacena el valor anterior del campo de entrada en una variable, luego aplica la cadena vacía al campo de entrada.
Luego espera 1 milisegundo y vuelve a poner el valor anterior.
fuente
Es 2019 y ninguno de los métodos anteriores funcionó para mí, pero este lo hizo, tomado de https://css-tricks.com/snippets/javascript/move-cursor-to-end-of-input/
fuente
el.focus()
en el,else if
así que no funcionó en algunos casos. Verifiqué que esto funciona ahora en Chrome y (estremecimiento) IESencillo. Al editar o cambiar valores, primero ponga el foco y luego ajuste el valor.
fuente
Todavía se necesita la variable intermedia, (ver var val =) de lo contrario el cursor se comporta de manera extraña, lo necesitamos al final.
fuente
el.setSelectionRange(-1, -1);
https://codesandbox.io/s/peaceful-bash-x2mti
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
En otros métodos js
-1
generalmente significa (para) el último carácter. Este es el caso de este también, pero no pude encontrar una mención explícita de este comportamiento en los documentos.fuente
Para todos los navegadores para todos los casos:
Se requiere tiempo de espera si necesita mover el cursor desde el controlador de eventos onFocus
fuente
Me gusta mucho la respuesta aceptada, pero dejó de funcionar en Chrome. En Chrome, para que el cursor llegue al final, el valor de entrada debe cambiar. La solución es la siguiente:
fuente
En jQuery, eso es
fuente
Este problema es interesante Lo más confuso al respecto es que ninguna solución que encontré resolvió el problema por completo.
+++++++ SOLUCIÓN +++++++
Necesita una función JS, como esta:
Necesitas llamar a este tipo en los eventos onfocus y onclick.
¡FUNCIONA EN TODOS LOS DISPOSITIVOS Y NAVEGADORES!
fuente
Acabo de descubrir que en iOS, la
textarea.textContent
propiedad de configuración colocará el cursor al final del texto en el elemento textarea cada vez. El comportamiento fue un error en mi aplicación, pero parece ser algo que podría usar intencionalmente.fuente
fuente
Tomando algunas de las respuestas ... haciendo un jquery de una sola línea.
fuente
Si el campo de entrada solo necesita un valor predeterminado estático, generalmente hago esto con jQuery:
Esto parece funcionar en todos los navegadores.
fuente
Si bien esta puede ser una pregunta antigua con muchas respuestas, me encontré con un problema similar y ninguna de las respuestas fue exactamente lo que quería y / o me explicaron mal. El problema con las propiedades selectionStart y selectionEnd es que no existen para el número de tipo de entrada (aunque se hizo la pregunta para el tipo de texto, creo que podría ayudar a otros que podrían tener otros tipos de entrada que necesitan enfocar). Entonces, si no sabe si el tipo de entrada que enfocará la función es un número de tipo o no, no puede usar esa solución.
La solución que funciona entre navegadores y para todos los tipos de entrada es bastante simple:
De esa manera, el cursor está al final del elemento de entrada.
Entonces, todo lo que haría es algo como esto (usando jquery, siempre que se pueda acceder al selector de elementos que se desea enfocar a través del atributo de datos 'elemento de enfoque de datos' del elemento seleccionado y la función se ejecuta después de hacer clic en '.foo' elemento):
¿Por qué funciona esto? Simplemente, cuando se llama a .focus (), el foco se agregará al comienzo del elemento de entrada (que es el problema central aquí), ignorando el hecho de que el elemento de entrada ya tiene un valor. Sin embargo, cuando se cambia el valor de una entrada, el cursor se coloca automáticamente al final del valor dentro del elemento de entrada. Entonces, si anula el valor con el mismo valor que se había ingresado previamente en la entrada, el valor se verá intacto, sin embargo, el cursor se moverá hasta el final.
fuente
Pruebe este funciona con Vanilla JavaScript.
En js
fuente
Coloque el cursor cuando haga clic en el área de texto al final del texto ... La variación de este código es ... ¡TAMBIÉN funciona! para Firefox, IE, Safari, Chrome ..
En el código del lado del servidor:
En Javascript:
fuente
Si establece el valor primero y luego establece el foco, el cursor siempre aparecerá al final.
Aquí está el violín para probar https://jsfiddle.net/5on50caf/1/
fuente
Quería poner el cursor al final de un elemento "div" donde contenteditable = true, y obtuve una solución con el código Xeoncross :
Y esta función hace magia:
Funciona bien para la mayoría de los navegadores, verifíquelo, este código coloca el texto y pone el foco al final del texto en el elemento div (no en el elemento de entrada)
https://jsfiddle.net/Xeoncross/4tUDk/
Gracias Xeoncross
fuente
También me enfrenté al mismo problema. Finalmente esto va a funcionar para mí:
Así es como podemos llamar a esto:
Me funciona en safari, IE, Chrome, Mozilla. En dispositivos móviles no probé esto.
fuente
¡Comprueba esta solución!
fuente
Súper fácil (puede que tenga que centrarse en el elemento de entrada)
fuente
Intenté las sugerencias antes, pero ninguna funcionó para mí (las probé en Chrome), así que escribí mi propio código, y funciona bien en Firefox, IE, Safari, Chrome ...
En Textarea:
En Javascript:
fuente
Aquí hay una demostración de jsFiddle de mi respuesta. La demostración utiliza CoffeeScript, pero puede convertirlo a JavaScript simple si es necesario.
La parte importante, en JavaScript:
Estoy publicando esta respuesta porque ya la escribí para otra persona que tenía la misma pregunta. Esta respuesta no cubre tantos casos extremos como las respuestas principales aquí, pero funciona para mí y tiene una demo jsFiddle con la que puedes jugar.
Aquí está el código de jsFiddle, por lo que esta respuesta se conserva incluso si jsFiddle desaparece:
fuente
Prueba el siguiente código:
fuente
setSelectionRange
enfoque es ciertamente mucho más eficiente cuando / donde sea compatible.Aunque estoy respondiendo demasiado tarde, pero para futuras consultas, será útil. Y también funciona en
contenteditable
div.Desde donde necesita establecer el foco al final; escribe este código
Y la función es -
fuente