Extraído de la posición de configuración de teclado de Josh Stodola en un cuadro de texto o área de texto con Javascript
Una función genérica que le permitirá insertar el cursor en cualquier posición de un cuadro de texto o área de texto que desee:
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
El primer parámetro esperado es la ID del elemento en el que desea insertar el cursor de teclado. Si no se puede encontrar el elemento, no pasará nada (obviamente). El segundo parámetro es el índice de posición de caret. Zero pondrá el teclado al principio. Si pasa un número mayor que el número de caracteres en el valor de los elementos, colocará el cursor al final.
Probado en IE6 y versiones posteriores, Firefox 2, Opera 8, Netscape 9, SeaMonkey y Safari. Lamentablemente, en Safari no funciona en combinación con el evento onfocus).
Un ejemplo del uso de la función anterior para obligar al teclado a saltar al final de todas las áreas de texto en la página cuando reciben el foco:
function addLoadEvent(func) {
if(typeof window.onload != 'function') {
window.onload = func;
}
else {
if(func) {
var oldLoad = window.onload;
window.onload = function() {
if(oldLoad)
oldLoad();
func();
}
}
}
}
// The setCaretPosition function belongs right here!
function setTextAreasOnFocus() {
/***
* This function will force the keyboard caret to be positioned
* at the end of all textareas when they receive focus.
*/
var textAreas = document.getElementsByTagName('textarea');
for(var i = 0; i < textAreas.length; i++) {
textAreas[i].onfocus = function() {
setCaretPosition(this.id, this.value.length);
}
}
textAreas = null;
}
addLoadEvent(setTextAreasOnFocus);
if(elem.selectionStart)
se rompe cuando selectionStart es 0, como también lo señala la respuesta de jhnns.elem.value = elem.value.replace(/^9/g,'+79')
en el código. En el cursor OperaMINI después+
. esta función no ayudaEl enlace en la respuesta está roto, este debería funcionar (todos los créditos van a blog.vishalon.net ):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
En caso de que el código se pierda nuevamente, estas son las dos funciones principales:
fuente
Como realmente necesitaba esta solución, y la solución de línea de base típica ( enfocar la entrada, luego establecer el valor igual a sí mismo ) no funciona en varios navegadores , pasé un tiempo ajustando y editando todo para que funcione. Sobre la base del código de @ kd7 , esto es lo que se me ocurrió.
¡Disfrutar! Funciona en IE6 +, Firefox, Chrome, Safari, Opera
Técnica de posicionamiento de intercalación entre navegadores (ejemplo: mover el cursor al FIN)
La carne y las papas son básicamente setCaretPosition de @ kd7 , con el mayor ajuste
if (el.selectionStart || el.selectionStart === 0)
, en firefox, la selección Start está comenzando en 0 , que en booleano, por supuesto, se está convirtiendo en False, por lo que se rompió allí.En Chrome, el mayor problema era que simplemente no
.focus()
era suficiente (¡seguía seleccionando TODO el texto!) Por lo tanto, establecemos el valor de sí mismo,el.value = el.value;
antes de llamar a nuestra función, y ahora tiene una comprensión y posición con el entrada para usar selectionStart .fuente
.onclick
lugar de.onfocus
dentro de su función search_field_focusel.value = el.value; [...] if(el !== null)
- Cambiaría estas dos líneas. Siel
es nulo,el.value = el.value
fallará, por lo que esa línea debe estar dentro deif
.Ajusté un poco la respuesta de kd7 porque elem.selectionStart se evaluará como falso cuando el selectionStart es incidentalmente 0.
fuente
Encontré una manera fácil de solucionar este problema, probado en IE y Chrome:
Pase el id. Del cuadro de texto y la posición del cursor a esta función.
fuente
Si necesita enfocar un cuadro de texto y su único problema es que todo el texto se resalta mientras desea que el cursor esté al final, entonces, en ese caso específico, puede usar este truco para establecer el valor del cuadro de texto en sí mismo después del enfoque:
fuente
fuente
fuente
tID
debe ser la identificación del elemento, no el objeto del elemento en sí. Si está pasando el objeto elemento, puede eliminar las 2 primeras líneas de este método y funcionará.Me gustaría arreglar las condiciones como a continuación:
fuente