box.addEventListener("rollOver", hoverTab(btn.id, 1));
box.addEventListener("rollOut", hoverTab(btn.id, 0));
Это не будет работать, если hoverTab
не является функцией, которая возвращает функцию, которая принимает событие в качестве единственного аргумента.Замените его на:
box.addEventListener("rollOver", hoverTab);
box.addEventListener("rollOut", rollOutTab);
И, как упоминал Джеймс, вы получите HBox
из event.currentTarget
function hoverTab(event:MouseEvent):void
{
var box:HBox = HBox(event.currentTarget);
}
Чтобы получить btn.id
внутри hoverTab
, храните HBoxesи btn.ids в два массива из цикла for-each.Теперь вы можете получить индекс HBox
, используя метод indexOf
- btn.id
будет иметь тот же индекс в своем массиве.
var boxes:Array = [];
var ids:Array = [];
for each (var btn:Object in ViewButtonData)
{
// build element
var box:HBox = new HBox();
boxes.push(box);
ids.push(btn.id);
box.addEventListener(MouseEvent.ROLL_OVER, hoverTab);
box.addEventListener(MouseEvent.ROLL_OUT, rollOutTab);
// add element to list
}
function hoverTab(event:MouseEvent):void
{
var box:HBox = HBox(event.currentTarget);
var btnid:Number = ids[boxes.indexOf(box)];
}
В качестве альтернативы (поскольку ActionScript допускает использование разных типов в одном массиве), вы можете вставить их в тот же массив и прочитать btn.id
как array[array.indexOf(box) + 1]