【问题标题】:actionscript 3 track dynamic text changeactionscript 3 跟踪动态文本更改
【发布时间】:2011-12-18 09:32:13
【问题描述】:

有没有办法“收听”动态文本?我在舞台上有这个动态文本字段,我想在动态文本更改后调用一个函数。我试图添加事件侦听器,但它似乎只适用于 INPUT 文本。有什么建议么? 谢谢

【问题讨论】:

标签: actionscript-3 actionscript dynamic-text


【解决方案1】:

虽然@annonymously 的答案有效,但附加 enterFrame 侦听器以等待文本更改(或任何更改,就此而言)并不是一个好主意 - 文本可能根本不会更改,那你为什么要多次运行一段代码每秒次数,如果可以避免的话?更不用说您必须一遍又一遍地为要监控的每个新文本字段实例执行此操作。

最好对实际变化做出反应,这些变化是由您自己的属性设置引起的。您应该简单地扩展 TextField 类并覆盖 htmlText 和/或 text 的设置器以调度更改事件:

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

【讨论】:

    【解决方案2】:

    您可以编写非常简单的子类,让您可以监听文本更改事件。

    子类:

    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());
            }
        }
    }
    

    【讨论】:

    • 糟糕,错过了@weltraumpirat 的回答 :)
    【解决方案3】:

    您尝试过CHANGE 事件吗?它应该适用于所有类型的文本字段,包括非输入字段。

    【讨论】:

    【解决方案4】:

    如您所说,只有输入文本才会调度 CHANGE 事件。你必须解决它,也许像这样:

    var oldText:String = "";
    
    function changeEnterFrame (e:Event) {
        if (oldText != textField.text) {
            // Do your stuff here
        }
        oldText = textField.text;
    }
    
    addEventListener(Event.ENTER_FRAME, changeEnterFrame);
    

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      相关资源
      最近更新 更多