2011-10-12 66 views
0

框TextChanged和valueCommit两个事件侦听器附接有一个火花textarea的如下时间(AS3 + FLEX4)触发了两个事件:如何停止在火花textarea的

addEventListener("textChanged", 
    function(event:Event):void {          
     colorize();     
},false,0,true); 

addEventListener("valueCommit", 
    function(event:Event):void {      
     colorize();     
},false,0,true); 

如果我在textarea的键入任何东西,那么这个colorize()函数会被调用两次。我怎样才能阻止这个事件不应该一起触发。请帮助

回答

1

如果你想听打字,为什么你有两个听众?如果你真的需要两个监听器,你需要排队colorizesetTimeout而不是直接调用它的:

import flash.utils.setTimeout; 

private var colorizeQueued:Boolean = false; 
private function queueColorize():void 
{ 
    if (colorizeQueued) 
     return; 

    colorizeQueued = true; 
    setTimeout(function():void 
    { 
     // Process for real and note update 
     colorize(); 
     colorizeQueued = false; 
    }, 100); 
} 


addEventListener("textChanged", 
    function(event:Event):void {          
     queueColorize();     
},false,0,true); 

addEventListener("valueCommit", 
    function(event:Event):void {      
     queueColorize();   
},false,0,true); 
+0

@N Rohler:只是出于好奇,为什么不将其与解决方案,并没有超时的工作吗? –

+0

@AntonPetrov:基本上,'queueColorize'方法执行此操作:如果它是第一次被调用,它会调用'colorize'。否则,它会说“我最近被打电话了,所以我不会去做任何事。” –

+0

你不明白我的问题,但我明白我想要的。谢谢。 –