15

changeorイベントを使用textInputして、TextInput コントロールでユーザー入力をキャプチャする必要がありますか? なんで?

4

4 に答える 4

46

textInputユーザーがコントロールにテキストを入力した場合にのみディスパッチされます。change一方、ユーザーが変更をコミットするたびにディスパッチされます。たとえば、ユーザーがテキストの一部を削除すると、changeイベントのみが送出されます。

テキストがコードによって変更された場合、これらはどちらもディスパッチされません。

flash.events.TextEvent.TEXT_INPUT:

ユーザーがコントロールにテキストを入力、削除、または貼り付けたときに送出されます。」

(そこにある「削除」という単語は無視してください-試してみたところ、ユーザーがテキストを削除したときにこのイベントは送出されません)

flash.events.Event.CHANGE:

「TextInput コントロール内のテキストがユーザー入力によって変更されたときに送出されます。このイベントは、データ バインディングまたは ActionScript コードを使用してテキストを変更した場合には発生しません。」

ユーザーが変更を「コミット」したときに送出されるイベントを使用することもできvalueCommitます (通常、テキスト フィールドからフォーカスを移動することによって)。ただし、このイベントは、フィールド値がプログラムによって変更された場合にも送出されることに注意してください。

于 2008-11-12T12:16:05.383 に答える
3

それは素晴らしい答えです、ハセグ。十分な担当者がいれば、賛成票を投じます。

ユーザー入力をキャプチャする目的に応じて、TextInput コンポーネントをサブクラス化し、change および textInput イベントの内部リスナーをオーバーライドできます。

これを行う理由がたくさんあるかどうかはわかりませんが、貼り付けられた改行が「\」ではなく「\r」として表される OS X のバグに対処するために最近行いました。ん。

サブクラス化されたオブジェクトのコンストラクターで super() 呼び出しの後に次を追加するだけです。

this.addEventListener(Event.CHANGE, textFieldChangeListener);   
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener);

次に、リスナー メソッドと実行するコードを追加します。

于 2008-11-21T18:13:23.077 に答える
0

Event.CHANGE イベントと TextEvent.TEXT_INPUT イベントの両方が、入力された文字ごとにトリガーされます。特定の TextInput フィールドに対して 1 回だけトリガーするイベントが必要な場合は、FocusEvent.FOCUS_OUTを使用します。

Event.CHANGE や TextEvent.TEXT_INPUT と同様に、このイベントはユーザー入力に対してのみトリガーされ、プログラムによる値の変更に対してはトリガーされません。

于 2011-05-19T22:22:38.533 に答える
0

CHANGEただし、が変更されたかはわかりません。TEXT_INPUTKEY_DOWN

于 2012-01-04T17:34:02.563 に答える