Flex文本更改事件

时间:2010-04-08 15:45:45

标签: flex actionscript-3 performance time

我正在跟踪textArea文本的更改速度。如果它变化超过500毫秒然后我不想做任何事情,但如果它在500毫秒内没有改变,我想调用一个方法。 我试过这样:

public function textchangeListener(e : Event):void
        {
            if(((new Date).getTime() - changeTime)>500)
            {
                prepareText();
            }

            changeTime = (new Date).getTime();
        }

此方法是文本更改的事件处理程序。 但问题是,如果它只在500毫秒内改变,之后它不会改变,那么我的方法将不会被调用。我这样做是为了获得更好的性能,所以只有当用户停止输入500毫秒时才会调用prepareText()。

3 个答案:

答案 0 :(得分:1)

这个怎么样......

获得第一个文本更改事件后,您可以调用类似textTimeOut()的过程。它基本上会像这样工作。

function textTimeOut():void
{
    start a timer for 500 ms
    set an event listener for it (your prepareText() function)
    if textTimeOut is called again before the timer gets to 0,
        reset the timer to 500 ms
}

答案 1 :(得分:0)

我会在事件处理程序中使用setTimeout,并在每次更改时重置它:

var changeTimeout:Number = -1
function handler(e:Event):void {
    if(changeTimeout != -1)
        clearTimeout(changeTimeout)
    changeTimeout = setTimeout(function():void{
        changeTimeout = -1
        prepareText();
    }, 500)
}

答案 2 :(得分:0)

所以我用了一个计时器。感谢您的建议。这就是最终结果:

    protected var timer:Timer = new Timer(300);

public function AdvancedTextArea()
        {
            super();
            this.addEventListener(Event.CHANGE,textchangeListener);
            timer.addEventListener(TimerEvent.TIMER,prepareText);
            timer.repeatCount = 1;

        }
public function textchangeListener(e : Event):void
        {
            if(timer.running)
            {
                timer.stop();
            }
            timer.start();

        }