JavaScript版ハングル入力器の作成メモ

テキストエリアのカーソル位置

Webブラウザが次の条件を満す、というのが大前提です。

「フォーム内のテキストエリアにカーソルを置いて、 テキストエリア内の文字列をJavaScript側から 変更したら、カーソルの位置はどうなるのか?」

  1. カーソル位置は変化しない
  2. カーソルは文字列の最後に移動
  3. カーソルは文字列の先頭に移動

1番または2番の場合、自分のJavaScript番ハングル入力器は作動するはずです。 3番だと、ちゃんと動きません。

よって、3番の動作をするWebブラウザではちゃんと動きません。

その例として、Windows版Opera 6があります。 ただし、テキストエリアにも2種類あって、 <input type="text">の方はちゃんと動くのですが、 <textarea>の方は3番の動作をするので動きません。

2002.3.17

(2003.8.13追記: Opera 7では、どちらのテキストエリアでもうまくうごきませんでした。 ちなみに、Opera6ではdiv要素の動的な変更ができませんでしたが、 Opera7ではできるようです。)

keyupイベント

keyupイベントが起った時、テキストエリアの文字列の最後の文字を見て、 適当に変換する、というのがハングル入力器の方針です。 (document.onkeyup="my_function"; の形でイベント処理関数を指定します。)

ところが、これだけだと、Shiftキーを離した場合などにも keyupイベントが発生するので、予想外の処理が起きます。

よって、keydownイベント発生時にテキストエリアの文字列の長さを記録して、 keyupイベント時のテキストエリアの文字列の長さと比較して、 1文字だけ多い場合にのみ、文字変換処理をするようにしています。

ここで、もしもkeydownイベントのかわりにkeypressイベントを利用したら どうなるのか?? 実は、ブラウザによって、ハングル入力器がちゃんと動いたり、動かなかったり するんです。 keydownイベントだと、うまくいくみたいです。

2002.3.17

キーの直接入力方式

上の「テキストエリア内でキー入力」という方法をとった理由は、 shiftキーが押されたかどうかを判定する方法を知らなかったからです。

しかし、ev.shiftKeyで判定できることがわかったので、 直接入力方式での実現をさぐることにしました。

しかし、いろいろと複雑なことがわかりました。

といった事が、組合せによって変わってくるみたいなのです。

何とかして、場合わけしてすっきりさせないと.......。

2003.8.13

(2003.9.4 追記:keypressを使うと、入力される文字がそのまま 取得できるようなので、これで行きます。 そうすれば、タイピング練習ソフト第2版の若干の手直しですみます。) (2003.9.4 さらに追記: 入力窓でキー入力する理由は、Operaではキーボードで画面を拡大・縮小したり その他の操作をできるからです。この機能を使わないようにするために、 入力窓の中で入力します。)

入力をKS完成型ハングルに制限する

第2版と第3版では、ハングル入力時に、全ての可能な組み合わせの ハングルを入力するのではなく、KS完成型2350文字に制限するように してみました。

johab.jsファイルだけを読み込むと11172文字すべて入力されますが、 johab-l.jsファイルも後から読み込むとKS完成型ハングルのみ 入力可能になります。

KS完成型ハングルしか表示されないフォント対策です。

2003.9.4


(c) chiyu (chiyu@sings.jp)
一覧に戻る