2011-08-30 21 views
5

私たちが知っているように、私たちが入力すると多くの出来事が引き起こされます。 keyup、keydown、keypressなど何か他のものを使用してください。中国語(ibus)を入力するためのJQuery/DOMイベント?

テキストフィールドの内容が変更された場合にのみ、他のイベントがトリガーされますか?存在しない場合は、この機能を実現するためのjavasrciptコードの記述方法

+0

あなたのユースケースについてもっと詳しく教えていただけますか?おそらくそれを達成する唯一の方法は、Webベースの入力メソッドをあなた自身を提供することです。 –

答えて

2

changeイベントが役立ちますか?

+0

いいえ、フィールド内のコンテンツが変更されたかどうかを変更で検出しますが、Enterキーを押すか、フォーカスが失われない限り、トリガーされません。 – castiel

+0

文字列を確定する前に(Enterキーを押すなど)文字列は実際には入力メソッドのプリエディットバッファに格納されます。つまり、ブラウザは、文字列をコミットする前に入力した内容を正確に把握できません。 –

0

私はコンテンツ編集可能要素のテキストノードがキーを押すことによって変更されたときに何が起こるかを決める簡単なフィドルを作成しました。私がそれをしていたとき、私は自分の仕事にibusを使っているので、ibusを使うときに何が起きるかを調べることにしました。私は、ibusを使用すると、生成される唯一のキーボードイベントは、役に立たないwhichの値を持つkeyupイベントであると判断しました。

http://jsfiddle.net/lddubeau/jWnL3/

  1. はそのフィドルに行く:ここ

    は、私が作成したフィドルです。

  2. Javascriptコンソールをオンにします。

  3. クリックして実行します。

  4. 「toto」という単語の2文字目と3文字目の間をクリックします。

  5. ibusを使用して入力します。たとえば、「私」と入力します。

  6. 出力はお使いのブラウザによって異なります。クロム29では各キーストロークが記録されているので、tonepyメソッドを使って私とタイプすると、 "w" "o" "3"と "1"のそれぞれに対してキーアップとキーダウンが得られます。 (ピンイン、そして1を打つ音とは、最初の選択肢を選択します。)最後のイベントは次のとおりです。

    event type: keyup 
    which: 229 
    keyCode: 229 
    charCode: 0 
    node value: 
        to我to 
    

    イベントこの1の前に、すべては、いくつかのことを除いて同じ値を持っている「のkeydown」タイプのものであり、もちろん、ノード値は最後のイベントまで "トート"を示します。

    は、Firefoxの23日だけのイベントが登録されています

    "event type:" "keyup" 
    "which:" 49 
    "keyCode:" 49 
    "charCode:" 0 
    "node value:" " 
        to我to 
    " 
    

    ないKeyDownイベントやキー入力イベントが生成されます。 (ASCIIの範囲内の文字を入力すると、各キーのKeyDownイベント、キー入力やからkeyupを取得。)とキーコードの

値は賢明なものに対応していないようです。私はイベントハンドラに渡されたイベントオブジェクトを調べて、ユーザが私だけをタイプしたことを示すフィールドを見ませんでした。

関連する問題