Flash 针对多个按钮,通过单击不同的按钮获得不同的值

Flash 针对多个按钮,通过单击不同的按钮获得不同的值,flash,actionscript-3,Flash,Actionscript 3,我想以多个按钮为目标,通过单击不同的按钮获得不同的值 假设有3个按钮:“button01”、“button02”、“button03” 这是我的代码: var targetArr:Array = ["button01","button02","button03"]; for (var i:int = 0; i < targetArr.length; i++) { var target = getChildByName(targetArr[i]); target.addEve

我想以多个按钮为目标,通过单击不同的按钮获得不同的值

假设有3个按钮:“button01”、“button02”、“button03”

这是我的代码:

var targetArr:Array = ["button01","button02","button03"];
for (var i:int = 0; i < targetArr.length; i++)
{
    var target = getChildByName(targetArr[i]);
    target.addEventListener(MouseEvent.CLICK, targetFunc);
    function targetFunc(event:MouseEvent):void
    {
        trace(i);
    }
}
var-targetar:Array=[“button01”、“button02”、“button03”];
对于(变量i:int=0;i
我没有通过点击不同的按钮得到不同的值,而是不断地得到“3”作为值。
我想要:点击“button01”会得到“0”作为值,点击“button02”会得到“1”作为值,点击“button03”会得到“2”“作为价值。怎么做?

你就快到了!发生的情况是,对
i
的引用被所有事件处理程序共享。注册事件处理程序时,您需要的是
i
值的独特副本

为此,您可以为循环的每个迭代创建一个新的闭包

var targetArr:Array = ["button01","button02","button03"];
for (var i:int = 0; i < targetArr.length; i++)
{
    var target = getChildByName(targetArr[i]);
    target.addEventListener(MouseEvent.CLICK, getTargetFunc(i));
    function getTargetFunc(value:Number):Function {
        return function(event:MouseEvent):void {
            trace(value);
        }
    }
}

你快到了!发生的情况是,对
i
的引用被所有事件处理程序共享。注册事件处理程序时,您需要的是
i
值的独特副本

为此,您可以为循环的每个迭代创建一个新的闭包

var targetArr:Array = ["button01","button02","button03"];
for (var i:int = 0; i < targetArr.length; i++)
{
    var target = getChildByName(targetArr[i]);
    target.addEventListener(MouseEvent.CLICK, getTargetFunc(i));
    function getTargetFunc(value:Number):Function {
        return function(event:MouseEvent):void {
            trace(value);
        }
    }
}

非常感谢彼得!这就是我要找的。嘿,没问题!我在回答中添加了另一个代码示例,它展示了解决此问题的另一种方法——最终使用相同的原则。再次感谢您提供的替代代码。我认为这一点对我来说更容易理解:DGlad我可以帮忙。是的,我同意,第二种方法更容易阅读——我们不必处理返回匿名函数的混淆问题。:)非常感谢彼得!这就是我要找的。嘿,没问题!我在回答中添加了另一个代码示例,它展示了解决此问题的另一种方法——最终使用相同的原则。再次感谢您提供的替代代码。我认为这一点对我来说更容易理解:DGlad我可以帮忙。是的,我同意,第二种方法更容易阅读——我们不必处理返回匿名函数的混淆问题。:)