Frage

Ich mag ein Eingabeelement haben (type = text) oder Textarea-Element, das durch das Auslösen bestimmte Tastatureingaben dynamisch überprüft. Dies wird für die chinesischen Pinyin Eingang verwendet werden, so zum Beispiel:

Die Benutzertypen „ma2“ in ein Eingabeelement. Das keydown Ereignis löst für jeden Tastendruck, und die 2 erscheint nie. Stattdessen, wenn der Benutzer drückt „2“, um das „a“ einen Ton Zeichen erhalten, wie folgt aus: „a“. Am Ende hat sich der Benutzer eingegeben: „ma“

.

Dies kann durch das Lesen und Ändern des gesamten Eingabewert mit $ (Element) .val () jedoch erreicht werden, wenn ein Eingangselement konzentrieren und es wird Wert von .val Aufruf ( „etwas“), bewegt sich der Cursor bis zum Ende des Textes. Dies funktioniert in den meisten Fällen gut, weil ein Benutzer weiterhin nur am Ende des Feldes eingeben, aber ich möchte dies in Arbeit alle Situationen.

... eine andere Lösung für dieses Problem innerhalb eines Ein- oder textarea-Element die Position eines Cursors zu bekommen / set wäre. Ich glaube nicht, das ist möglich in Javascript, aber.


So, das war Remy auf dem richtigen Weg sicher. Das Auslösen von Tasten mir erlauben würde, nicht zur Eingabe von Sonderzeichen ohne viel Aufwand sowieso. Stattdessen ich fangen die keydown Ereignis und setzen Sie den Wert des Eingangs / TextArea-, und dann den Cursor bewegen.

Ich habe nichts Gutes für caret bekommen / Einstellung in jQuery gefunden, aber die folgenden wirklich dieses Problem für mich brach. Ich werde einen Link zu meinem letzten Pinyin Eingabecode schreiben, wenn es stabil ist. Es ist ziemlich nah dran jetzt.

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

War es hilfreich?

Lösung

Sie können nicht viel Glück auslösenden keypress haben - ich ziemlich sicher bin, dass es sei denn, die keypress (d stammt aus dem Browser) vertrauenswürdig ist, wird es nicht aufgenommen werden

.

Sie können jedoch das Ersetzen von Text tun und die Karat wieder einsetzen, wo es war - statt es bis zum Ende des Strings zu schießen. Sie müssen setSelectionRange und createtext verwenden (IE).

Ich habe eine kleine Demo zusammengestellt - die Ersetzungen werden Sie nicht wirklich Worte sehen passen, aber es zeigt, wie es funktioniert:

http://jsbin.com/emudi/ (die Quelle bearbeiten http://jsbin.com/emudi/edit )

Der Trick ist, zur Kenntnis zu nehmen, wo das Karat ist, ersetzen Sie das gefundene Wort substr verwenden (anstatt regex ersetzte die falschen Spiele zu vermeiden) und dann am Ende des neuen Wortes das Karat zu ersetzen.

Der Austausch wird auf dem Raumdruck ausgelöst oder die weg zu verwischen. Ein Hinweis auf diese - man kann den Ersatz auf einem bestimmtes Zeichen (das heißt, die ‚2‘) auslösen -. Aber ich würde auf nicht empfehlen, für den Ersatz der Suche alle keypress

Andere Tipps

Auch für einfachen Code, um die "caret" in einer Cross-Browser-Art und Weise steuern könnte dies nützlich sein:

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

ein bisschen mit der Antwort spät, aber ich bin sicher, dass Sie immer noch diese alten Sachen nützlich finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top