2011-12-18 14 views
0

動的テキストを「聴く」方法はありますか?ステージ上にこのダイナミックテキストフィールドがあり、ダイナミックテキストが変更されたら関数を呼び出す必要があります。イベントリスナーを追加しようとしましたが、INPUTテキストでのみ動作するようです。助言がありますか? ありがとうactionscript 3トラック動的テキスト変更

+0

可能な重複:実はhttp://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously

答えて

0

CHANGEイベントを試しましたか?入力されていないものを含め、すべてのタイプのTextFieldで機能するはずです。

+0

この質問が示すように、入力テキストのみがCHANGEイベントを送出します。 http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously

0

あなたが言ったように、入力テキストディスパッチCHANGEイベントだけです。あなたは、おそらくこのように、それを回避する必要があります:

var oldText:String = ""; 

function changeEnterFrame (e:Event) { 
    if (oldText != textField.text) { 
     // Do your stuff here 
    } 
    oldText = textField.text; 
} 

addEventListener(Event.ENTER_FRAME, changeEnterFrame); 
4

@ annonymouslyの答えは動作しますが、(そのことについて、または任意の変更)のテキストの変更を待つのenterFrameリスナーを取り付ける良いアイデアではありません - テキストがまったく変更されない場合は、回避できれば、1秒間に何回もコードを実行するのはなぜですか?実際には、監視したい新しいテキストフィールドインスタンスごとに何度も何度もやり直さなければならないということは言うまでもありません。

実際の変更に対応する方が良いです。これは、独自のプロパティ設定によって発生します。あなたは、単にTextFieldクラスを拡張して上書きセッターをのhtmlTextおよび/またはテキストの変更イベントをディスパッチする必要があります。

override public function set text (text : String) : void { 
    super.text = text; 
    dispatchEvent (new Event (Event.CHANGE); 
} 
+0

よろしくお願いします。他のすべてのヘルパーにも感謝します。 – jazz

1

あなたがテキストの変更イベントを聞くことを可能にする非常に単純なサブクラスを書くことができます。

Sublass:

package 
{ 
    import flash.events.Event; 
    import flash.text.TextField; 

    public class CustomTextField extends TextField 
    { 
     public function CustomTextField() 
     { 
      super(); 
     } 

     override public function set text(value:String):void 
     { 
      if(super.text != value) 
      { 
       super.text = value; 
       dispatchEvent(new Event(Event.CHANGE, true)); 
      } 
     } 
    } 
} 

使用例:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class CustomTextFieldTest extends Sprite 
    { 
     private var tf:CustomTextField; 

     public function CustomTextFieldTest() 
     { 
      tf = new CustomTextField(); 

      tf.x = tf.y = 10; 
      tf.width = tf.height = 200; 

      tf.addEventListener(Event.CHANGE, onTfChange); 
      addChild(tf); 

      stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
     } 

     private function onTfChange(e:Event):void { 
      trace("text changed, new text: '" + tf.text + "'"); 
     } 

     private function onMouseDown(e:MouseEvent):void { 
      tf.text = "some random text: " + Math.round(100 * Math.random()); 
     } 
    } 
} 
+0

おっと、@ weltraumpiratさんの答えを逃しました:) – skozin

関連する問題