2011-12-18 3 views
0

동적 텍스트를 "듣는"방법이 있습니까? 스테이지에이 동적 텍스트 필드가 있고 동적 텍스트가 변경되면 함수를 호출하려고합니다. 이벤트 리스너를 추가하려고했지만 INPUT 텍스트에서만 작동하는 것 같습니다. 어떤 제안? 감사합니다.actionscript 3 트랙 동적 텍스트 변경

+0

가능한 중복 : 사실 http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously

답변

0

CHANGE 이벤트를 시도 했습니까? 비 입력 텍스트 필드를 포함한 모든 유형의 TextField에 대해 작동해야합니다.

+0

이 질문에서 알 수 있듯이 입력 텍스트 만 CHANGE 이벤트를 전달합니다. http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously

0

입력 텍스트 만 CHANGE 이벤트를 전달합니다. 당신은 아마 다음과 같이 그것을 해결해야합니다 :

는 @ annonymously의 응답 작품 (그 문제에 대한, 또는 변경) 텍스트의 변화를 기다릴를 enterFrame 리스너를 부착은 좋은 생각이 아니다
var oldText:String = ""; 

function changeEnterFrame (e:Event) { 
    if (oldText != textField.text) { 
     // Do your stuff here 
    } 
    oldText = textField.text; 
} 

addEventListener(Event.ENTER_FRAME, changeEnterFrame); 
4

동안 - 텍스트가 전혀 변경되지 않을 수도 있습니다. 그러면 피할 수 있다면 초당 여러 번 코드를 실행해야하는 이유는 무엇입니까? 사실, 당신이 모니터하고 싶은 각각의 새로운 텍스트 필드 인스턴스에 대해 반복해서해야 할 필요는 없습니다.

실제 변경 사항에 반응하는 것이 더 좋으며, 이는 사용자가 설정 한 속성으로 인해 발생합니다. 당신은 단순히 TextField 클래스를 확장하고 재정의 세터의 htmlText 및/또는 텍스트에 대 한 변경 이벤트를 파견해야

override public function set text (text : String) : void { 
    super.text = text; 
    dispatchEvent (new Event (Event.CHANGE); 
} 
+0

알겠습니다, 감사합니다. 다른 모든 도우미들에게도 감사드립니다. – jazz

1

당신은 당신이 텍스트 변경 이벤트를들을 수 있습니다 매우 간단한 서브 클래스를 작성할 수 있습니다.

Sublass :

package 
{ 
    import flash.events.Event; 
    import flash.text.TextField; 

    public class CustomTextField extends TextField 
    { 
     public function CustomTextField() 
     { 
      super(); 
     } 

     override public function set text(value:String):void 
     { 
      if(super.text != value) 
      { 
       super.text = value; 
       dispatchEvent(new Event(Event.CHANGE, true)); 
      } 
     } 
    } 
} 

사용 예 :

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class CustomTextFieldTest extends Sprite 
    { 
     private var tf:CustomTextField; 

     public function CustomTextFieldTest() 
     { 
      tf = new CustomTextField(); 

      tf.x = tf.y = 10; 
      tf.width = tf.height = 200; 

      tf.addEventListener(Event.CHANGE, onTfChange); 
      addChild(tf); 

      stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
     } 

     private function onTfChange(e:Event):void { 
      trace("text changed, new text: '" + tf.text + "'"); 
     } 

     private function onMouseDown(e:MouseEvent):void { 
      tf.text = "some random text: " + Math.round(100 * Math.random()); 
     } 
    } 
} 
+0

죄송합니다, @ weltraumpirat의 답변을 놓쳤습니다 :) – skozin