青柳臣一 blog : .NET や C# がメインの blog

.NET や C# がメインの blog
投稿数 - 548, コメント - 259, トラックバック - 205

Google サジェストの不思議

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

で、試したコード。

<html>
<body/>
<form name="f">
<input name="a"
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"
/><br/>
keydown: <span id="dc"></span>:<span id="dv"></span><br/>
keyup: <span id="uc"></span>:<span id="uv"></span>
</form>
</body>
<html>

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

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

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

<html>
<script>
function test()
{
    document.f.b.value = document.f.a.value;
    setTimeout(test, 100);
}
setTimeout(test, 100);
</script>
<body/>
<form name="f">
<input name="a"/><br/>
<input name="b"/>
</form>
</body>
<html>

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

投稿日時 : 2005年3月14日 13:58

トラックバックは下記のURLにpingを送信してください。
TrackBack URL: http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/1471.aspx

フィードバック

# AJAX IMEがオンでも入力値を取り出す

Test it! AJAXな英和辞書&小テスト に和英辞書機能を追加しようと思い
2006/04/29 5:35 | Dragonfly's blog (トラックバック)

# [JavaScript]Google Suggestみたく

IMEで入力中の文字ってどうやって取得するのかなーと思って調べたら すぐに見つかった。これはわかりやすい。 Google サジェストの不思議 http://www.divakk.co.jp/blog/aoyagi/archive/2005/03/14/1471.aspx
2006/08/23 12:25 | ぱせりの秘密の開発日誌 (トラックバック)

コメントの投稿

タイトル  
名前  
URL
コメント   
Protected by Clearscreen.SharpHIPこの絵に表示されている文字列を入力してください (半角で4文字です):