Pergunta

Eu gostaria de ter um elemento de entrada (type = text) ou textarea elemento que valida dinamicamente, activando as teclas digitadas específicos. Isso será usado para entrada chinês pinyin, assim, por exemplo:

O usuário digita "ma2" em um elemento de entrada. Os gatilhos KeyDown evento para cada tecla pressionada, e os 2 nunca aparece. Em vez disso, quando o usuário pressiona "2" a "a" receberá uma marca de tom, como este: "A". No final, o usuário digitou: "Ma"

.

Isso pode ser feito através da leitura e alterar o valor de entrada inteira usando $ (elemento) .val () no entanto, quando um elemento de entrada tem o foco e do valor é definido chamando .val ( "algo"), o cursor se move ao final do texto. Esta multa na maioria das situações funciona porque um usuário apenas continua digitando no final do campo, mas eu quero que este trabalho em todas situações.

... outra solução para este problema seria a de obter / definir a localização de um cursor dentro de um elemento de entrada ou textarea. Eu não acho que isso é possível em javascript, no entanto.


Assim, Remy estava no caminho certo, com certeza. keypresses desencadeantes não me permitiria caracteres de entrada especiais, sem um monte de problemas de qualquer maneira. Em vez disso, eu pegar o evento keydown e defina o valor da entrada / textarea e mova o cursor.

Eu não encontrei nada de bom para acento circunflexo obter / definir em jQuery, mas o seguinte realmente quebrou esse problema para baixo para mim. Vou postar um link para o meu código de entrada pinyin final, quando ele é estável. É muito perto agora.

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

Foi útil?

Solução

Você pode não ter muita sorte keypress provocando -. Estou bastante certo de que a menos que o keypress é de confiança (ou seja, se origina a partir do navegador), ele não vai ser pego

No entanto, você pode fazer substituição de texto e insira a parte traseira quilates onde foi - em vez de atirar-lo para o fim da cadeia. Você precisa usar setSelectionRange e createTextRange (para IE).

Eu coloquei um pouco demo - as substituições que você verá não combinam com palavras reais, mas mostra como funciona:

http://jsbin.com/emudi/ (para editar a fonte http://jsbin.com/emudi/edit )

O truque é tomar nota de onde o quilate é, substituir a palavra encontrada usando substr (ao invés de regex para evitar a substituição das partidas erradas) e, em seguida, substituindo o quilates no final da palavra nova.

A substituição é acionado na imprensa espaço ou borrar a distância. Uma nota sobre isso - você poderia provocar a substituição de um personagem específico (ou seja, o '2') -. Mas eu não recomendo à procura de substitutos no todas keypress

Outras dicas

Além disso, para código simples controlar o "acento circunflexo" de uma forma cross-browser isso poderia ser útil:

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

um pouco tarde com a resposta, mas eu tenho certeza que você ainda vai encontrar este material velho útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top