我有一个看似简单的任务,但我似乎无法弄明白。我正忙着在ActionScript 3中创建一个项目,虽然我在ActionScript 2中相当流利,但我在这里有点难过。
我在按钮对象中有一个简单的动态文本字段。此文本字段的名称为txt_title。我已经附加事件处理程序来在它们悬停时更改按钮的alpha值,但是我还想在悬停时更改按钮内文本字段的值。我的事件监听器如下所示:
function hoverHandler(Event:MouseEvent):void{
var object:Object = Event.target;
var txt:TextField = object.txt_title;
txt.text = "TEST";
object.alpha = 1;
}
alpha工作正常,但是在尝试操作文本字段时我一直收到以下错误:
ReferenceError:错误#1069:在flash.display.SimpleButton上找不到属性txt_title,并且没有默认值。在main_fla :: MainTimeline / hoverHandler()
对此问题的任何亮点都将不胜感激,
西蒙
答案 0 :(得分:1)
事件是一个类名,将其更改为小写,以确保您没有名称空间问题。
此外,请确保您使用的是正确的对象。我添加了一个trace语句来查看toString方法的含义。当你知道它是什么对象类型时,你应该这样抛出它,这样你就可以看到它在编译时有什么属性,而不是在运行时。 (我把它命名为简单的按钮,因为这就是错误所说的。)
function hoverHandler(event:MouseEvent):void{
trace(event.target);
var object:SimpleButton = event.target as SimpleButton;
var txt:TextField = object.txt_title;
txt.text = "TEST";
object.alpha = 1;
}
以上考虑,此代码仍然无效。您已将事件侦听器附加到SimpleButton对象。我在as2中并不是那么出色,但看起来你是用python或javascript心态编程的。在运行时将属性添加到对象将不起作用。
获取文本字段的另一种方法是查看 DisplayContainer 。你可以这样做:
for(var i:uint = 0; i < sb.numChildren ; i++)
{
trace(sb.getChildAt(i));
}
在 DisplayContainer 中找到TextField后,您就可以执行要执行的操作。
答案 1 :(得分:1)
可能是,event.target返回触发事件的对象中的DisplayObject。
有两种方法可以防止这种情况发生:
按钮内的声明:
mouseChildren = false;
或在EventListener中引用具有currentTarget的对象:
var object : SimpleButton = event.currentTarget as SimpleButton;
也可能是,您的txt_title TextField不是公开的,而是私有的。
textField也必须位于SimpleButton的基础中。如果它在另一个容器Object中进一步嵌套,它将无法工作。