change
orイベントを使用textInput
して、TextInput コントロールでユーザー入力をキャプチャする必要がありますか? なんで?
4 に答える
textInput
ユーザーがコントロールにテキストを入力した場合にのみディスパッチされます。change
一方、ユーザーが変更をコミットするたびにディスパッチされます。たとえば、ユーザーがテキストの一部を削除すると、change
イベントのみが送出されます。
テキストがコードによって変更された場合、これらはどちらもディスパッチされません。
flash.events.TextEvent.TEXT_INPUT
:
「ユーザーがコントロールにテキストを入力、削除、または貼り付けたときに送出されます。」
(そこにある「削除」という単語は無視してください-試してみたところ、ユーザーがテキストを削除したときにこのイベントは送出されません)
「TextInput コントロール内のテキストがユーザー入力によって変更されたときに送出されます。このイベントは、データ バインディングまたは ActionScript コードを使用してテキストを変更した場合には発生しません。」
ユーザーが変更を「コミット」したときに送出されるイベントを使用することもできvalueCommit
ます (通常、テキスト フィールドからフォーカスを移動することによって)。ただし、このイベントは、フィールド値がプログラムによって変更された場合にも送出されることに注意してください。
それは素晴らしい答えです、ハセグ。十分な担当者がいれば、賛成票を投じます。
ユーザー入力をキャプチャする目的に応じて、TextInput コンポーネントをサブクラス化し、change および textInput イベントの内部リスナーをオーバーライドできます。
これを行う理由がたくさんあるかどうかはわかりませんが、貼り付けられた改行が「\」ではなく「\r」として表される OS X のバグに対処するために最近行いました。ん。
サブクラス化されたオブジェクトのコンストラクターで super() 呼び出しの後に次を追加するだけです。
this.addEventListener(Event.CHANGE, textFieldChangeListener);
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener);
次に、リスナー メソッドと実行するコードを追加します。
Event.CHANGE イベントと TextEvent.TEXT_INPUT イベントの両方が、入力された文字ごとにトリガーされます。特定の TextInput フィールドに対して 1 回だけトリガーするイベントが必要な場合は、FocusEvent.FOCUS_OUTを使用します。
Event.CHANGE や TextEvent.TEXT_INPUT と同様に、このイベントはユーザー入力に対してのみトリガーされ、プログラムによる値の変更に対してはトリガーされません。
CHANGE
ただし、何が変更されたかはわかりません。TEXT_INPUT
KEY_DOWN