Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/02/2006, 09:10
Avatar de Amröd
Amröd
 
Fecha de Ingreso: febrero-2006
Mensajes: 9
Antigüedad: 18 años, 3 meses
Puntos: 0
Controlar el caret en un input

Buenos dias/tardes/noches forer@s.

Necesitaria vuestra ayudita para algo que espero no sea demasiado complejo (aunque a mi me esta pareciendo un mundo )

Por exigencias del guion (aka "el jefe lo quiere asi") debo convertir el contenido de un input a mayusculas segun se esta escribiendo.

Es decir, aplicar el toUpperCase() a cada caracter introducido. De forma que se vea en todo momento en mayusculas y el value sea el mismo que se ve.

this.value = this.value.toUpperCase() funciona, pero no me deja retroceder si no es borrando o con el raton.

Hrasteando un poco me he dado cuenta que cada vez que sobreescribo el contenido de un input el caret se me posiciona al final... lo cual me fastidia todo el invento.

He encontrado un codigo para saber la posicion del caret, lo cual me permite introducir el caracter convertido a mayusculas en esa posicion, pero inmediatamente se me va el caret al final de nuevo

Por si a alguien le interesa:
var range = document.selection.createRange();
var bookmark = range.getBookmark();
caret_pos = bookmark.charCodeAt(2) - 2;

Aunque no entiendo muy bien que es lo que hace, el resultado es que en caret_pos tengo la posicion del cursor dentro del input.
Llamo a esta funcion tanto en onKeyUp como en onMouseUp.

Y luego introduzco el caracter por medio de:
oInput.value = subStrA + chrMays + subStrB;

chrMays es el caracter introducido por el usuario convertido a mayusculas (cancelo la entrada y lo concateno yo a capon).
subStrX son las subcadenas anteriores resultado de dividir la cadena en el punto que he detectado el caret.

El problema es q esto me pone la letra donde yo quiero, pero el caret pasa al final.

Si alguien tiene alguna idea, cualquier cosilla sera bienvenida.

PD.- yo lo haria con CSS y luego lo convertiria tranquilamente con el toUpperCase(), pero no puedo utilizar esa opcion