2011-10-12 64 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

你不明白我的問題,但我明白我想要的。謝謝。 –