有没有办法“听”动态文本?我在舞台上有这个动态文本字段,我想在动态文本更改后调用一个函数。我试图添加事件侦听器,但它似乎只适用于 INPUT 文本。有什么建议么?谢谢
问问题
2385 次
4 回答
4
虽然@annonymously 的答案有效,但附加 enterFrame 侦听器以等待文本更改(或任何更改,就此而言)并不是一个好主意 - 文本可能根本不会改变,那么为什么你要每秒运行一段代码多次,是否可以避免?更不用说这样一个事实,即您必须一遍又一遍地为要监视的每个新文本字段实例执行此操作。
最好对实际更改做出反应,这些是由您自己的属性设置引起的。您应该简单地扩展 TextField 类并覆盖 htmlText 和/或 text 的设置器以调度更改事件:
override public function set text ( text : String ) : void {
super.text = text;
dispatchEvent (new Event (Event.CHANGE);
}
于 2011-12-18T10:09:49.660 回答
1
您可以编写非常简单的子类,它允许您监听文本更改事件。
次类:
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());
}
}
}
于 2011-12-18T10:14:04.630 回答
0
你试过这个CHANGE
活动吗?它应该适用于所有类型的文本字段,包括非输入字段。
于 2011-12-18T09:56:55.887 回答
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);
于 2011-12-18T09:57:03.170 回答