Pregunta

Me gustaría tener un elemento de entrada (tipo = texto) o elemento de área de texto que valide dinámicamente activando pulsaciones de teclas específicas. Esto se utilizará para la entrada de pinyin chino, por ejemplo:

El usuario escribe " ma2 " en un elemento de entrada. El evento keydown se activa para cada pulsación de tecla, y el 2 nunca aparece. En cambio, cuando el usuario presiona " 2 " la " a " recibirá una marca de tono, como esta: " á " ;. Al final, el usuario habrá escrito: " má " ;.

Esto se puede lograr leyendo y cambiando el valor de entrada completo usando $ (element) .val (), sin embargo, cuando un elemento de entrada tiene el foco y su valor se establece llamando a .val (" algo "), el cursor Se mueve al final del texto. Esto funciona bien en la mayoría de las situaciones porque un usuario continúa escribiendo al final del campo, pero quiero que esto funcione en todas situaciones.

... otra solución a este problema sería obtener / configurar la ubicación de un cursor dentro de un elemento de entrada o área de texto. Sin embargo, no creo que esto sea posible en javascript.


Entonces, Remy estaba en el camino correcto, seguro. Activar pulsaciones de teclas no me permitiría ingresar caracteres especiales sin mucha molestia de todos modos. En lugar de eso, capturo el evento keydown y configuro el valor de input / textarea, y luego muevo el símbolo de intercalación.

No he encontrado nada bueno para conseguir / poner caret en jQuery, pero lo siguiente realmente me solucionó el problema. Publicaré un enlace a mi último código de entrada de pinyin cuando esté estable. Está bastante cerca ahora.

http://blog.vishalon.net/Post/57.aspx http://demo.vishalon.net/getset.htm

¿Fue útil?

Solución

Es posible que no tenga mucha suerte al activar la pulsación de tecla. Estoy bastante seguro de que, a menos que se confíe en la pulsación de la tecla (es decir, se origine en el navegador), no se detectará.

Sin embargo, puedes reemplazar el texto e insertar el quilate donde estaba, en lugar de dispararlo hasta el final de la cadena. Debe utilizar setSelectionRange y createTextRange (para IE).

He reunido una pequeña demostración: los reemplazos que verás no coinciden con palabras reales, pero muestra cómo funciona:

http://jsbin.com/emudi/ (para editar la fuente http://jsbin.com/emudi/edit )

El truco consiste en tomar nota de dónde está el quilate, reemplazar la palabra encontrada usando substr (en lugar de expresiones regulares para evitar reemplazar las coincidencias incorrectas) y luego volver a colocar el quilate al final de la nueva palabra.

El reemplazo se activa en el espacio presionando o borrando la distancia. Una nota sobre esto: puede activar el reemplazo en un carácter específico (es decir, el '2'), pero no recomendaría buscar reemplazos en cada pulsación de tecla.

Otros consejos

Además, para un código simple que controla el " caret " de manera cruzada, esto podría ser útil:

http://javascript.nwbox.com/cursor_position/

un poco tarde con la respuesta, pero estoy seguro de que aún encontrarás útiles estas cosas viejas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top