2011-12-18 130 views
0

有沒有辦法「聆聽」動態文本?我在舞臺上有這個動態文本框,並且我想在動態文本被更改後調用一個功能。我試圖添加事件監聽器,但它似乎只適用於INPUT文本。有什麼建議麼? 謝謝actionscript 3跟蹤動態文本更改

+0

可能重複:http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously 2011-12-18 10:00:13

回答

0

您是否嘗試過CHANGE活動?它應該適用於所有類型的TextField,包括非輸入類型。

+0

其實,正如這個問題所說,只有輸入文本發送CHANGE事件。 http://stackoverflow.com/questions/977847/as3-textbox-change-event-not-firing – annonymously 2011-12-18 09:58:06

0

正如你所說,只有輸入文本發送CHANGE事件。你必須解決它,也許是這樣的:

var oldText:String = ""; 

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

addEventListener(Event.ENTER_FRAME, changeEnterFrame); 
4

雖然@ annonymously的答案作品,重視enterFrame事件聽衆等待文本改變(或任何改變,對於這個問題)是不是一個好主意 - 中文本可能根本不會改變,那麼爲什麼你會每秒多次運行一段代碼,如果它可以避免的話?更不用說,事實上,你必須一遍又一遍地爲每一個你想要監視的新文本字段實例。

最好對實際變化做出反應,這些變化是由您自己設置的屬性引起的。您應該簡單地擴展了TextField類,並重寫setter方法的htmlText和/或文字派遣更改事件:

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

明白了,謝謝。也感謝所有其他幫手。 – jazz 2011-12-18 13:31:41

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 2011-12-18 10:16:47