0

我试图在这个小 Flash 8/AS2 项目中对我的“DOM”引用负责。

越来越令人沮丧的是获得对其他影片剪辑和对象的引用。例如,目前我访问表单提交按钮的代码看起来像这样

var b:Button = _level0.instance4.submitBtn;

我希望 AS2 有一种类似于 AS3MovieClip.getChildByName()甚至 Javascript 的实例检索方法document.getElementById()。因为硬编码这些匿名实例的名称(就像instance4上面一样)感觉真的很脏。

但是,我在这个 AS2 Reference中找不到任何类似的东西。

4

3 回答 3

1

如果在 Flash IDE 中将 MovieClip 放置在舞台上,您可以在属性面板中为其指定适当的实例名称。

如果它是动态添加的,你也可以给它一个名字,并额外存储一个引用:

var my_MC=createEmptyMovieClip("instanceName", depth);

在任何一种情况下,您都可以使用_parentClip.instanceNamemy_MC.

于 2008-11-05T20:49:08.297 回答
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") 来做同样的事情,但我对所涉及的范围界定问题有点模糊。

于 2008-11-11T04:20:32.927 回答
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 );
}
于 2008-11-05T22:08:27.997 回答