我正在尝试对这个小小的Flash 8 / AS2项目中的“DOM”引用负责。
越来越令人沮丧的是获取对其他电影剪辑和对象的引用。例如,目前我访问表单的提交按钮的代码看起来像这样
var b:Button = _level0.instance4.submitBtn;
我希望AS2的实例检索方法类似于AS3的MovieClip.getChildByName()
甚至是Javascript的document.getElementById()
。因为硬编码这些匿名实例的名称(如上面的instance4
)只是感觉非常非常脏。
但是,我在this AS2 Reference找不到任何类似的东西。
答案 0 :(得分:1)
如果MovieClip放置在Flash IDE的舞台上,您可以在属性面板中为其指定正确的实例名称。
如果它是动态添加的,您还可以为其命名,并另外存储引用:
var my_MC=createEmptyMovieClip("instanceName", depth);
在任何一种情况下,您都可以使用_parentClip.instanceName
或my_MC.
答案 1 :(得分:1)
有几种方法可以做到这一点。最简单的方法是使用数组表示法。您之前的示例,如下所示:
var b:Button = _root.instance4.submitBtn;
在数组表示法中看起来像这样:
var b:Button = _root["instance4"].submitBtn;
因此,如果您想循环已经创建的100个按钮并将alpha设置为0:
for( var i:Number = 0; i < 101; i++)
{
var button:Button = _root["instance"+i].submitBtn;
button._alpha = 0;
}
您也可以使用eval(“instance4”)来做同样的事情,但我对涉及的范围问题有点模糊。
答案 2 :(得分:0)
您可以自己编写代码(代码未经测试,但您明白了):
MovieClip.prototype.getElementByName = function(name : String) : Object
{
var s : String;
var mc : Movieclip = null;
for( s in this )
{
if( this[s] instanceof MovieClip )
{
if( s == name )
{
mc = this[ s ];
break;
}
mc = this[s].getElementByName( name );
}
}
return( mc );
}