¿Es posible cambiar el carácter que se ha ingresado al presionar una tecla, sin hacerlo manualmente?¿Puedo cambiar condicionalmente el carácter ingresado en una entrada al presionar una tecla?
Por ejemplo, si quiero forzar las letras mayúsculas en base a alguna condición, que sería bueno para hacer lo siguiente:
function onKeypressHandler(e)
{
if (condition)
{
e.which -= 32;
}
}
Pero por supuesto que no funciona.
NOTA: Este esno un uppercasing a través de la junta, pero sólo caracteres específicos.
Tal vez quiero decir if (e.which >= 97 && e.which <= 102)
o if (Wind.Direction == 'South')
o lo que sea - la condición en sí no es importante, pero la uppercasing sólo debe aplicarse al carácter actual no toda la entrada.
Lo puedo hacer añadiendo manualmente el carácter modificado, pero esta es una manera fea y desordenada de hacerlo, y probablemente más lenta de lo que podría ser.
function onKeypressHandler(e)
{
if (condition)
{
$j(this).val($j(this).val() + String.fromCharCode(e.which - 32));
return false;
}
}
Un defecto específico con este método - si se selecciona todo el texto de entrada y entrar en una clave, si cae en esto, entonces no elimina el contenido existente, sino que simplemente añade al contenido que el usuario desea quitar. (Tendría que investigar la detección de cualquier texto seleccionado para resolver eso, lo que hace que este sea aún más feo.)
¿Alguien puede proporcionar una mejor solución?
¿Cómo manejaría pegar, deshacer/rehacer, arrastrar y soltar u otros casos de múltiples caracteres siendo ingresado al mismo tiempo, ¿o no es tan importante? –
Andy, eso no es muy importante aquí, pero aún sería útil manejarlo - ¿Supongo que tendría que involucrar caminar la cuerda manualmente, dentro del evento onchange? –
O los eventos * oninput * y * onpropertychange *. Esbocé estos en mi blog hace poco tiempo - http://whattheheadsaid.com/2010/09/effectively-detecting-user-input-in-javascript y tengo un plugin jQuery casi completo para ello en las obras. –