Ich möchte ein Eingabeelement (type=text) oder ein Textarea-Element haben, das dynamisch validiert, indem es bestimmte Tastendrücke auslöst. Dies wird für die chinesische Pinyin-Eingabe verwendet werden, so zum Beispiel:
Der Benutzer gibt "ma2" in ein Eingabeelement ein. Das Keydown-Ereignis wird bei jedem Tastendruck ausgelöst, und die 2 erscheint nie. Wenn der Benutzer "2" drückt, erhält das "a" stattdessen eine Tonmarke, etwa so: "á". Am Ende wird der Benutzer getippt haben: "má".
Dies kann durch das Lesen und Ändern des gesamten Eingabewerts mit $(element).val() erreicht werden. Wenn jedoch ein Eingabeelement den Fokus hat und sein Wert durch den Aufruf von .val("irgendwas") gesetzt wird, bewegt sich der Cursor zum Ende des Textes. Das funktioniert in den meisten Situationen gut, weil ein Benutzer einfach am Ende des Feldes weitertippt, aber ich möchte, dass dies auch in alle Situationen.
...eine andere Lösung für dieses Problem wäre es, die Position eines Cursors innerhalb eines Eingabe- oder Textarea-Elements zu erhalten/zu setzen. Ich glaube nicht, dass dies in Javascript möglich ist, jedoch.
Remy war also mit Sicherheit auf dem richtigen Weg. Das Auslösen von Tastendrucken würde es mir nicht erlauben, Sonderzeichen ohne viel Aufwand einzugeben. Stattdessen fange ich das Keydown-Ereignis ab und setze den Wert des Eingabe-/Textfelds, und verschiebe dann den Cursor.
Ich habe nicht gefunden, etwas Gutes für Caret bekommen / Einstellung in jQuery, aber die folgenden wirklich brach dieses Problem für mich. Ich werde einen Link zu meinem endgültigen Pinyin-Eingabe-Code posten, wenn es stabil ist. Es ist ziemlich nah jetzt.
http://blog.vishalon.net/Post/57.aspx http://demo.vishalon.net/getset.htm