2009-05-17 5 views
0

momentan höre ich auf "Enter" -Taste, um mit dem Senden einer Nachricht zu beginnen,Wie erkennen Multi-Byte-Zeichen Eingabe Ende von Javascript?

Aber für Multi-Byte-Zeichen, die "Enter" -Taste soll ein bestimmtes Zeichen wählen.

Das Problem ist, dass ich keine Ahnung habe, wie zu erkennen, ob ein Benutzer in der Mitte ist

der Eingabe

ein Multi-Byte-Zeichen, und auch wenn er in diesem Prozess, wird die Nachricht der ersten gesendet werden

Zeit drückt er die "Enter" -Taste.

So ist die Benutzererfahrung wirklich seltsam.

Hat jemand eine Lösung dafür?

Wenn Sie nicht bekommen, was ich meine oben, versuchen hier zu chatten,

und wenn Sie ein Gespräch begonnen, Schaltmodus Multi-Byte,

dann wissen Sie, was ich bedeuten.

der Link hier:

http://maishudi.com/OMegle.php

Antwort

0

Ich bin Ihr Hinweis auf multibyte Eingang unter der Annahme, ein Verweis auf "Eingabemethoden" (oder "Input Method Editors" unter Windows).

Leider gibt es im Moment keine wirkliche Lösung - DOM3 würde Mechanismen hinzufügen, aber es scheint, dass dies aufgrund der Komplexität fallen gelassen wurde.

Ein Teil der Komplexität ergibt sich aus dem sehr unterschiedlichen Verhalten der einzelnen Eingabemethoden, bevor Sie überhaupt die Verhaltensdiskrepanz zwischen Browsern berücksichtigen. Ein gutes Beispiel ist, einfach zu überprüfen, welche Schlüsselereignisse Sie für ein Verhalten mit japanischem, koreanischem und (traditionellem und vereinfachtem) Chinesisch erhalten. Die Browser können dies nicht vermeiden, da sie auf Ereignisse reagieren, die direkt von den Eingabeeditoren ausgelöst werden.

Die einzigen Dinge, auf die man sich wirklich verlassen kann, sind keyDown-Ereignisse und selbst dann nicht so sehr in opera und firefox - Safari und IE bieten keyDown-Ereignisse während der IME-Komposition mit einem charCode von 229 und einem keyUp-Ereignis mit ein charCode, der der tatsächlich gedrückten Taste entspricht.

Es gibt ein textInput -Ereignis, aber das wird nur von Safari unterstützt (und von Proxy sollte Chrome es auch unterstützen), aber es ist sowieso nicht wesentlich besser als Standard-Ereignisse: -/