Событие изменения текста Flex

Я отслеживаю, как быстро меняется текст textArea. Если он меняется быстрее, чем за 500 мс, я ничего не хочу делать, но если он не меняется за 500 мс, я хочу вызвать метод. Я пробовал так:

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

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

Этот метод является обработчиком событий для изменения текста. Но проблема в том, что если он изменится менее чем за 500 мс и после этого не изменится, то мой метод не будет вызываться. Я делаю это для лучшей производительности, поэтому prepareText() вызывается только тогда, когда пользователь перестает печатать в течение 500 мс.


person Biroka    schedule 08.04.2010    source источник


Ответы (3)


Как насчет этого...

Как только вы получите первое событие изменения текста, вы можете вызвать такую ​​процедуру, как 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
}
person Ryan M    schedule 08.04.2010

Я бы использовал setTimeout в обработчике событий и сбрасывал его каждый раз, когда он менялся:

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

Поэтому я использовал таймер. Спасибо за совет. Вот что получается в итоге:

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

        }
person Biroka    schedule 08.04.2010