2010-04-08 7 views
0

Je suis en train de suivre la vitesse à laquelle le texte d'un textArea change. Si cela change plus vite que 500 ms alors je ne veux rien faire, mais si ça ne change pas en 500 ms, je veux appeler une méthode. J'ai essayé comme ceci:Evénement Flex text change

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

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

Cette méthode est le gestionnaire d'événements pour le changement de texte. Mais le problème est que si elle ne change que sous 500 ms et qu'elle ne change pas, ma méthode ne sera pas appelée. Je fais cela pour une meilleure performance, ainsi le prepareText() n'est appelé que lorsque l'utilisateur arrête de taper 500 ms.

Répondre

1

Que diriez-vous ... ce

Une fois que vous obtenez le premier événement de changement de texte que vous pouvez appeler une procédure comme textTimeOut(). Cela fonctionnera essentiellement comme ça.

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 
} 
0

Je voudrais utiliser un setTimeout dans le gestionnaire d'événements et le réinitialiser à chaque fois qu'il change:

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

J'utilisé une minuterie. Merci pour le conseil. Voici le résultat final:

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

     } 
Questions connexes