如何在for循环中的Actionscript中为标签/按钮创建唯一的eventlistener?

时间:2012-02-17 13:55:03

标签: actionscript-3 flex flex4 flex4.5

目前,我在Actionscript(适用于Flex)中使用此功能在BorderContainer中创建了26个标签(ID 字母):

var lettersArray:Array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

for(var indexLetter:String in lettersArray) {
    var labelLetter:Label = new Label();
    labelLetter.text = lettersArray[indexLetter];
    labelLetter.addEventListener(MouseEvent.CLICK, function():void { getUsers(lettersArray[indexLetter]); });

    letters.addElement(labelLetter);
}

但是当我点击一个字母时,只有字母Z被发送到函数 getUsers 。因此,当我从for循环创建标签时,只有eventlistener适用于最后创建的标签。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我假设getUsers(lettersArray[indexLetter])是一个错误,因为你无法访问那样的数组元素

var lettersArray:Array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

for each(var letter:String in lettersArray) {
    var labelLetter:Label = new Label();
    labelLetter.text = letter;
    labelLetter.addEventListener(MouseEvent.CLICK, function():void { getUsers(e.currentTarget.text); });

    letters.addElement(labelLetter);
}