批量添加按钮单击事件

时间:2013-11-25 21:25:56

标签: actionscript-3 actionscript

我正在尝试创建一个脚本,为数组中的每个对象添加一个事件侦听器,并在该事件侦听器触发时,我希望它添加与该键相关联的字母以输入到标签上。但是当我运行程序时没有任何反应?我可以添加一些虚拟代码,如lblInput.text =“cats”;它运行正常,所以程序肯定在运行脚本。

编辑:事实证明按钮点击实际上并不起作用,为什么我看不出它有什么问题而且没有错误?

这是我的代码:

package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Main extends MovieClip {

        public function Main() {
            this.addEventListener('enterFrame',function() {
                var buttons:Array = new Array(["Q",btnQ],
                                              ["W",btnW],
                                              ["E",btnE],
                                              ["R",btnR],
                                              ["T",btnT],
                                              ["U",btnY],
                                              ["U",btnU],
                                              ["I",btnI],
                                              ["O",btnO],
                                              ["P",btnP],
                                              ["A",btnA],
                                              ["S",btnS],
                                              ["D",btnD],
                                              ["F",btnF],
                                              ["G",btnG],
                                              ["H",btnH],
                                              ["J",btnJ],
                                              ["K",btnK],
                                              ["L",btnL],
                                              ["Z",btnZ],
                                              ["X",btnX],
                                              ["C",btnC],
                                              ["V",btnV],
                                              ["B",btnB],
                                              ["N",btnN],
                                              ["M",btnM]);  

                for(var i:int = 0; i < buttons.length; i++)
                {
                    buttons[i][1].addEventListener(MouseEvent.CLICK,function(){

                        if(lblInput.text == "Type something to begin..")
                            lblInput.text = buttons[i][0];
                        else
                            lblInput.appendText(buttons[i][0]);

                    });
                }
            });
        }

    }
}

1 个答案:

答案 0 :(得分:0)

putvande所述,i变量的值不是您在事件处理程序中所期望的值。因此,最简单的方法是将变量作为按钮的属性,然后可以从处理程序中的事件对象中检索该属性。你说你的按钮是动画片段,因此它们可以很好地工作,因为它们是对象的扩展。

但是看到你想要一个字符范围,你可以没有数组,只需指定一个范围。特别是因为你给了所有按钮一个通用名称加上所需的字符。

Main函数中:

// 65 = capital A in Unicode
// 90 = capital Z in Unicode
var characterRange:Object = {begin:65, end:90};

var character:String;
var button:MovieClip;

for ( var i:int = 0; i < characterRange.end-characterRange.begin; ++i ) {
    // use String.fromCharCode to get "A" from 65 etc.
    character = String.fromCharCode(i + characterRange.begin);
    // get the button based on the character
    button = MovieClip(this.getChildByName("btn"+character));
    // add the character as a property of the button
    button.character = character;
    // attach an click handler
    button.addEventListener(MouseEvent.CLICK, buttonClick);
}

作为事件处理函数:

function buttonClick(e:MouseEvent):void {
    // get the character/letter from the currently clicked button
    var letter:String = MovieClip(e.currentTarget).character;
    if ( lblInput.text == "Type something to begin..") {
        lblInput.text = letter;
    } else {
        lblInput.appendText(letter);
    }
}

字符代码示例:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7efe.html