Tengo una página web con un textarea, y necesito capturar las teclas escrito por el usuario (por lo que puedo sustituir diferentes caracteres unicode para las teclas de la máquina). Mi código es el siguiente:
$("#myTextArea").bind('keypress', function(event) {
var keyInput = event.which;
//call other functions
});
Este código anterior funciona en Pc, y el iPhone/Safari. Sin embargo, error al usar Chrome en android (samsung) de la tableta. Por alguna razón, cuando yo escriba en el virtual android (suave) del teclado, el «keypress» evento no se activa. La versión de android es 5.0.2.
Si trato de usar «keyUp» o «keyDown», siempre devuelve 229 para todos los caracteres (excepto la tecla de retorno, el espacio, la tecla de retroceso, etc).
Aunque el código de la tecla es siempre 229, el cuadro de texto muestra el correcto caracteres tecleados por el usuario. Lo que significa que el dispositivo sabe que tecla se ha introducido, pero de alguna manera yo soy incapaz de conseguir una manija en este caso (y el código de la llave) con javascript.
Aquí son las alternativas que he probado hasta ahora, y sus resultados:
$("#mainTextArea").on("keydown keyup", function(event) {
//event.which and event.keyCode both return 229
$(document).on('keypress', function(event) {
//function is not triggered
$('#myTextArea').bind('input keypress', function(event) {
//comes inside function, but keyCode and which are undefined
Cualquier ayuda con respecto a este tema se agradece..
- Android bug documentado aquí: bugs.chromium.org/p/chromium/issues/detail?id=118639
Por desgracia parece que no puede hacer mucho aquí.
Evento Keypress es obsoleto, por lo tanto no se activan.
229 en keyup y keydown indica que el búfer de teclado está ocupado. La razón – cuando se presiona una tecla – la entrada todavía no está garantizado a ser lo que el usuario presiona, porque de auto suggest y otros eventos que puedan seguir inmediatamente y anular el evento.
Aunque en mi opinión hubiera sido mejor enviar la clave de la primera, luego el fuego de otro evento tal vez en el auto sugieren, de modo que puede actuar por separado…
La única cosa que yo actualmente se sabe de es unir a los dos, keydown y keyup, almacenar el valor en keydown, obtener el valor en keyup y encontrar el delta, que es lo que el usuario presionó. Por desgracia esto no va a funcionar para los no-controles de entrada (por ejemplo, – el cuerpo o algo así).
Tal vez no lo que quieres escuchar como respuesta, pero todavía.
Me encontré con el mismo problema. Varias explicaciones están ahí, pero de todos modos me parece extraño que ninguna de las soluciones que se ofrecen.
Por el momento lo resuelto por la captura de la oninput evento.
«Este evento es similar al evento onchange. La diferencia es que el oninput evento se produce inmediatamente después de que el valor de un elemento que ha cambiado, mientras que onchange se produce cuando el elemento pierde el foco, después de que el contenido ha cambiado»
Este evento de apoyo a inserta texto, de pegar texto o correcciones en los & sugerencias.
que no me da la solución perfecta porque yo sólo puede manipular el texto DESPUÉS de que se ha entrado, pero por el momento es la mejor que tengo.
Si alguien tiene una solución mejor, estaré encantado de oír hablar de ella.
Me encontré con esta discusión, mientras que la investigación de un proyecto en el que estaba trabajando. Tuve que crear máscaras de entrada para una aplicación móvil, y Pavel Donchev la respuesta me puso a pensar sobre lo que podría funcionar para capturar claves en Android. En mi proyecto específico, keydown y keyup no sería suficiente ya que el evento keyup se activa sólo después de que se suelta una tecla, lo que implicaría que en una tarde de validación, así que hice algunas investigaciones más (y un montón de prueba y error) con eventos de entrada y consiguió trabajo.
JS:
HTML:
La oninput evento se activa justo después de que el evento keydown, que es el momento perfecto para mi validaciones.
He recopilado toda la cosa, en un artículo. Si tienes curiosidad, puedes leer sobre esto aquí.
Hay un
textInput
evento que le da el carácter introducidosólo tienes que comprobar tu entrada de caracteres en el código de la tecla, si es 0 o 229 entonces aquí es la función getKeyCode() que utiliza charCodeAt de JS para devolver el código de la tecla que lleva cadena de entrada de un parámetro y devuelve el código de la tecla de último carácter.
He puesto en marcha recientemente un «menciona que» en la última versión de nuestro Astro AI asistida aplicación de Correo electrónico. Básicamente, el tipo de «@» en nuestro componer vista de la web y obtendrá una lista de sugerencias de autocompletar. Nosotros, al igual que la mayoría de la gente, tenía problemas tratando de resolver esto en el Javascript. Lo que finalmente funcionó fue una solución nativa. Si @Override WebView del onCreateInputConnection() método, usted puede ajustar el super.onCreateInputConnection() resultado (que es sólo un InputConnection interfaz) con una clase personalizada. A continuación, en el contenedor de la aplicación, puede interceptar la entrada a través de commitText() o setComposingText() o tal vez algún otro método específico para lo que usted está buscando…como se elimina. No sé si quiere obtener las devoluciones de llamada en los caracteres de control como flechas arriba y abajo, pero tal vez este puede ser un buen lugar para comenzar a resolver su problema específico.
ME LO IMAGINÉ!
Aquí un 100% de la solución de trabajo que funciona en todas partes con TODAS las prestaciones, incluyendo incluso emoji sugerencias en iOS y cualquier contenido pegado. Yo estoy usando la subcadena comparación a encontrar cosas que ha cambiado de onInput a onInput.
Los puntos desde los que a la que se elimina el texto y de que a la que se inserta se señaló.
De calificación y selección de una respuesta se agradece.