2011-12-18 102 views
0

有没有办法“聆听”动态文本?我在舞台上有这个动态文本框,并且我想在动态文本被更改后调用一个功能。我试图添加事件监听器,但它似乎只适用于INPUT文本。有什么建议么? 谢谢actionscript 3跟踪动态文本更改

+0

可能重复:http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously 2011-12-18 10:00:13

回答

0

您是否尝试过CHANGE活动?它应该适用于所有类型的TextField,包括非输入类型。

+0

其实,正如这个问题所说,只有输入文本发送CHANGE事件。 http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously 2011-12-18 09:58:06

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事件听众等待文本改变(或任何改变,对于这个问题)是不是一个好主意 - 中文本可能根本不会改变,那么为什么你会每秒多次运行一段代码,如果它可以避免的话?更不用说,事实上,你必须一遍又一遍地为每一个你想要监视的新文本字段实例。

最好对实际变化做出反应,这些变化是由您自己设置的属性引起的。您应该简单地扩展了TextField类,并重写setter方法的htmlText和/或文字派遣更改事件:

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

明白了,谢谢。也感谢所有其他帮手。 – jazz 2011-12-18 13:31:41

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 2011-12-18 10:16:47