Я создал простую скрипку, чтобы определить, что происходит, когда текстовый узел в contenteditable элементе модифицируется нажатием клавиши. Делая это, я решил проверить, что происходит при использовании ibus, потому что я использую ibus для своей работы. Я определил, что при использовании ibus единственным генерируемым событием клавиатуры является событие keyup со значением which
, которое бесполезно.
Вот скрипка, которую я создал:
http://jsfiddle.net/lddubeau/jWnL3/
Идите к этой скрипке.
Включите консоль Javascript.
Нажмите «Выполнить».
Щелкните между 2dn и третьим символом слова "toto".
Введите что-нибудь, используя ibus. Например, введите 我.
Вывод зависит от вашего браузера. В Chrome 29 каждое нажатие клавиши записывается, поэтому, если я наберу 我, используя метод тональности, я получу keyup и keydown для каждого из "w", o "" 3 "и" 1 ". (Пининь, тон, а затем удар по 1, чтобы выбрать первый вариант.) Финальное событие:
event type: keyup
which: 229
keyCode: 229
charCode: 0
node value:
to我to
Все события до этого имеют одинаковые значения, за исключением того, что некоторые имеют тип "keydown", и, конечно, значение узла показывает "toto" до последнего события.
На Firefox 23 зарегистрировано только одно событие:
"event type:" "keyup"
"which:" 49
"keyCode:" 49
"charCode:" 0
"node value:" "
to我to
"
События нажатия клавиш или нажатия клавиш не генерируются. (При наборе символов в диапазоне ascii вы получаете нажатие клавиш, нажатие клавиш и нажатие клавиш для каждой клавиши.)
Значения которого и keyCode, похоже, не соответствуют чему-либо разумному. Я изучил объект события, переданный в обработчик события, и не увидел ни одного поля, которое указывало бы на то, что пользователь только что набрал 我.