Вы почти у цели! Происходит следующее: ссылка на 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
вспомогательной функции, которая затем возвращает функцию-обработчик события. Таким образом, мы используем закрытие close сверх определенного значения i
во время регистрации обработчика.
РЕДАКТИРОВАТЬ: Вот еще один немного другой способ организации вещей. Для каждой итерации вашего цикла вы можете вызывать функцию, которая регистрирует обработчик:
addHandler(i);
function addHandler(value:Number):void {
target.addEventListener(MouseEvent.CLICK, targetFunc);
function targetFunc(event:MouseEvent):void
{
trace(value);
}
}