【问题标题】:Flex text change eventFlex 文本更改事件
【发布时间】:2010-04-08 15:45:45
【问题描述】:
我正在跟踪 textArea 的文本变化的速度。如果它的变化快于 500 毫秒,那么我不想做任何事情,但如果它在 500 毫秒内没有变化,我想调用一个方法。
我试过这样:
public function textchangeListener(e : Event):void
{
if(((new Date).getTime() - changeTime)>500)
{
prepareText();
}
changeTime = (new Date).getTime();
}
此方法是文本更改的事件处理程序。
但问题是,如果它仅在 500 毫秒内发生变化并且之后它没有变化,那么我的方法将不会被调用。我这样做是为了获得更好的性能,因此仅当用户停止输入 500 毫秒时才会调用 prepareText()。
【问题讨论】:
标签:
apache-flex
actionscript-3
performance
time
【解决方案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
}
【解决方案2】:
我会在事件处理程序中使用 setTimeout 并在每次更改时重置它:
var changeTimeout:Number = -1
function handler(e:Event):void {
if(changeTimeout != -1)
clearTimeout(changeTimeout)
changeTimeout = setTimeout(function():void{
changeTimeout = -1
prepareText();
}, 500)
}
【解决方案3】:
所以我用了一个计时器。感谢您的建议。最终结果是这样的:
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();
}