10

これが可能かどうかさえわからないので、ばかげた質問であれば申し訳ありません。

keyupユーザーが入力ボックスに入力したときに関数を実行するように、jQuery を介してコールバックを設定しました。英語の場合は問題なく機能します。

ただし、日本語/韓国語/中国語でテキストを入力する場合、ユーザーがテキストを確認するまで関数は呼び出されません。

彼らがタイピングを開始したことを検出し、まだ完成していないテキストにアクセスすることは可能ですか?

おそらくそれはOSレベルのものだと思っているので、Javascriptはそれにアクセスできません。

編集:これは Chrome と Safari では機能するが、Firefox では機能しないことに気付きました (まだ Windows で試す機会がありませんでした)。そのため、Chrome は keyup を呼び出し、テキストを取得することができます。しかし、私はまだ Firefox で上記の問題を抱えています。

4

2 に答える 2

20

およびイベントが役立つ場合がありますcompositionstartcompositionupdatecompositionendこれらは、IME 入力がいつ使用されているかを検出するのに役立ちます。

たとえば、IME を使用して日本語で「か」を入力するとします。
次のイベントが (示されている順序で) 発生します。

  • k(IME 表示) keydown、compositionstartcompositionupdatecompositionend、input
  • a(IME 表示)、compositionstartcompositionupdatecompositionend、input
  • enter(IME を閉じる) キーダウン、入力

コンポジトン イベントは、IME が表示されているとき (enterが押される前) にのみ発生することに注意してください。また、 keypressイベントが発生していないことにも注意してください。これは、IME 以外の入力に対してのみ発生します。

ユーザーの未完成のテキストにアクセスするにdataは、イベントのプロパティを使用できます。

$('#input').on('compositionupdate', function(e) {
    console.log(e.data);
});

詳細については、MDN: compositionstartcompositionupdatecompositionendInputEventを参照してください。

于 2016-05-08T12:08:52.017 に答える
5

これはFirefoxの既知の問題であり、ブラウザが何をすべきは明確ではありません

この問題を回避するための可能な方法をここに示します。ここでは、(イベントに依存するのではなく)テキストフィールドがテキストの変更についてポーリングされます。

于 2011-09-07T10:12:55.130 に答える