¿Cómo se configura la posición del cursor en un campo de texto usando jQuery? Tengo un campo de texto con contenido, y quiero que el cursor de los usuarios se coloque en un cierto desplazamiento cuando se centran en el campo. El código debería verse así:
$('#input').focus(function() {
$(this).setCursorPosition(4);
});
¿Cómo sería la implementación de esa función setCursorPosition? Si tuviera un campo de texto con el contenido abcdefg, esta llamada resultaría en la posición del cursor de la siguiente manera: abcd ** | ** efg.
Java tiene una función similar, setCaretPosition. ¿Existe un método similar para javascript?
Actualización: modifiqué el código de CMS para trabajar con jQuery de la siguiente manera:
new function($) {
$.fn.setCursorPosition = function(pos) {
if (this.setSelectionRange) {
this.setSelectionRange(pos, pos);
} else if (this.createTextRange) {
var range = this.createTextRange();
range.collapse(true);
if(pos < 0) {
pos = $(this).val().length + pos;
}
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
}(jQuery);
javascript
jquery
html
textfield
jcnnghm
fuente
fuente
$(this).get(0).setSelectionRange)
? Sabes que es exactamente lo mismothis.setSelectionRange
, pero más lento y más difícil de leer, ¿verdad? jQuery no está haciendo literalmente nada por usted aquí.Respuestas:
Tengo dos funciones:
Entonces puedes usar setCaretToPos de esta manera:
Ejemplo en vivo con a
textarea
y aninput
, que muestra el uso de jQuery:Mostrar fragmento de código
A partir de 2016, probado y trabajando en Chrome, Firefox, IE11, incluso IE8 (vea esto último aquí ; los fragmentos de pila no son compatibles con IE8).
fuente
textarea
(yinput
) para mí en Chrome, Firefox, IE8 e IE11.Aquí hay una solución jQuery:
Con esto, puedes hacer
fuente
selectRange($('.my_input')[0], 3, 5)
si ya está usando jQuery. Además, debería funcionar con más de un elemento, si lo necesita, por cualquier razón. Si desea nativos puros, utilice la solución de CMS.$('#elem').focus()
antemano para que apareciera el cursor parpadeante.Las soluciones aquí son correctas, excepto el código de extensión jQuery.
La función de extensión debe iterar sobre cada elemento seleccionado y volver
this
a admitir el encadenamiento. Aquí eselde una versión correcta:fuente
return this.each(function...)
y eliminar la línea independiente.Encontré una solución que me funciona:
Ahora puede mover el foco al final de cualquier elemento llamando a:
O usted especifica la posición.
fuente
this.scrollTop(this[0].scrollHeight);
, para garantizar que el área de texto se desplace para hacer visible el punto de inserción.Esto funcionó para mí en Safari 5 en Mac OSX, jQuery 1.4:
fuente
Me doy cuenta de que esta es una publicación muy antigua, pero pensé que debería ofrecer una solución más simple para actualizarla usando solo jQuery.
Uso para usar ctrl-enter para agregar una nueva línea (como en Facebook):
Estoy abierto a la crítica. Gracias.
ACTUALIZACIÓN: Esta solución no permite que funcione la funcionalidad normal de copiar y pegar (es decir, ctrl-c, ctrl-v), por lo que tendré que editar esto en el futuro para asegurarme de que la parte vuelva a funcionar. Si tiene una idea de cómo hacerlo, comente aquí, y con gusto lo probaré. Gracias.
fuente
En IE para mover el cursor en alguna posición, este código es suficiente:
fuente
Estoy usando esto: http://plugins.jquery.com/project/jCaret
fuente
¿Establece el foco antes de insertar el texto en el área de texto?
fuente
Esto me funciona en cromo
Aparentemente necesita un retraso de un microsegundo o más, porque generalmente un usuario se enfoca en el campo de texto haciendo clic en alguna posición en el campo de texto (o presionando la pestaña) que desea anular, por lo que debe esperar hasta que la posición esté establecido por el usuario, haga clic y luego cámbielo.
fuente
Solo recuerde devolver falso justo después de la llamada a la función si está utilizando las teclas de flecha, ya que Chrome de lo contrario arruina el frack.
fuente
return false;
. Quieres en suevent.preventDefault();
lugar. Si devuelve falso, está insinuando loevent.stopPropagation()
que no siempre es deseableEn base a esta pregunta , la respuesta no funcionará perfectamente para ie y opera cuando hay una nueva línea en el área de texto. La respuesta explica cómo ajustar el selectionStart, selectionEnd antes de llamar a setSelectionRange.
Probé el ajustarOffset de la otra pregunta con la solución propuesta por @AVProgrammer y funciona.
fuente
Pequeña modificación al código que encontré en bitbucket
El código ahora puede seleccionar / resaltar con puntos de inicio / finalización si se le dan 2 posiciones. Probado y funciona bien en FF / Chrome / IE9 / Opera.
El código se enumera a continuación, solo se modificaron algunas líneas:
fuente
Tenía que hacer que esto funcionara para elementos contentos y jQuery y pensé que alguien podría quererlo listo para usar:
El uso
$(selector).getCaret()
devuelve el desplazamiento del número y$(selector).setCaret(num)
establece el desplazamiento y establece el foco en el elemento.También un pequeño consejo, si ejecuta
$(selector).setCaret(num)
desde la consola, devolverá el archivo console.log pero no visualizará el foco ya que está establecido en la ventana de la consola.Bests; D
fuente
Puede cambiar directamente el prototipo si setSelectionRange no existe.
Enlace jsFiddle
fuente