Javascript - Обнаружение ввода китайских символов, таких как Google Docs - PullRequest
2 голосов
/ 23 января 2012

Я пытаюсь надежно определить, когда китайские иероглифы вставляются в текстовое поле. Если я добавлю обработчики keyup, keydown и keypress в поле ввода, событие не будет запущено, когда пользователь выберет китайский символ из IME (редактор метода ввода). Например, на Mac / Firefox с китайским упрощенным пиньян, если я наберу:

ni, затем нажмите 1

Я получаю событие нажатия клавиши только для «n», а нажатие клавиши вверх для «1». Событие нажатия клавиши не запускается. Примечание: я использую GWT, но не думаю, что это должно иметь значение.

Мне было любопытно, как Google Docs делает это. Я специально заметил для китайского языка символ «n», добавляемый в виде текста к скрытому iframe с помощью класса «docs-texteventtarget-iframe» (но не «i»). Я предполагаю, что они делают это, чтобы обнаружить, когда вставлен китайский символ.

Как Google Docs узнает, что язык ввода изменился на китайский? Например, если мой язык ввода английский, и я набираю 'n', он не добавляется к этому скрытому iframe. Существуют ли какие-либо распространенные методы обнаружения событий клавиш китайских иероглифов?

Ответы [ 2 ]

1 голос
/ 27 января 2017

Когда пользователь вводит текст с помощью IME (Редактор метода ввода), то перед изменением содержимого поля ввода в окне композиции IME происходит много взаимодействий. Вы можете обнаружить это по событиям compositionstart и compositionend. На самом деле, пока идет процесс композиции, вы определенно не хотите украсть события keyup / keydows из IME. В элементе ввода текста вы можете поймать, когда содержимое меняется через событие input.

0 голосов
/ 11 апреля 2013

Я подозреваю, что вы не получаете событие нажатия клавиши, потому что ввод поступает из IME, а не с клавиатуры, так же, как вы не получаете события клавиш, если вставляете в поле.

Выможно попробовать добавить ValueChangeHandler в текстовое поле, чтобы проверить, отлавливает ли он искомые события.

...