IMEで入力中の文字をインクリメンタルサーチ

以前から不思議に思っていたがここに答えがあった!

http://www.divakk.co.jp/blog/aoyagi/archive/2005/03/14/1471.aspx

「Google サジェストとアラート」 で書いた Google サジェスト(日本語版) ですが、使ってみて 「おや?」 と思うことがありました。IME で漢字を入力しようとすると、確定していなくてもサジェストが表示されるんです。どうやっているのか気になってました。

で、試したコード。


onkeydown=”document.getElementById(‘dc’).innerText=event.keyCode;
document.getElementById(‘dv’).innerText=document.f.a.value”
onkeyup=”document.getElementById(‘uc’).innerText=event.keyCode;
document.getElementById(‘uv’).innerText=document.f.a.value”
/>

keydown: :

keyup: :


IME がオンのあいだもキーアップするたびに keyup は呼ばれるようです。keydown は呼ばれてるような呼ばれてないようなよくわからない感じです。
また、 要素の value は IME で入力中の読みも含めて返されるようです。
と言うわけで、別に特別なことはしなくても、keyup のタイミングで value を参照すれば確定前の文字列も含めた文字列が取り出せます。

上記は Windows 2000 Professional、IE6 SP1、IME は Win2000 標準のやつ、という環境で試した結果です。OS、IE、IME が違えば動作は違ってくると思いますし、ブラウザが IE 以外の場合はぜんぜん違う結果になる可能性が大だと思います。

で、FireFox 1.0 で同じような感じで試してみたら、IME がオンのあいだは keydown も keyup も呼ばれないみたいです。それじゃあということで、





こんな風にして、100ミリ秒おきに 要素の value がどうなっているのか表示されてみました。すると、ちゃんと IME で入力中の読みも含めて取りだせました。