wjt1989wjt 2010-08-03 09:50
浏览 314
已采纳

关于Flex循环注册事件的问题

在这个程序中我循环的网页面添加十个按钮,并为每个按钮注册事件,按理说弹出的消息应该是不一样的,为什么都是10呢

<?xml version="1.0" encoding="utf-8"?>
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="init()">

<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.controls.Button;
        function init():void{

          for(var i:int=0;i<10;i++){    
           var btn:Button=new Button();
           btn.x=i*20;
           btn.y=i*20;
           btn.width=i*40;
           btn.height=i*20;

           this.addElement(btn);    

           btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){
             click(String(i));             
           }
           );


          }

        }

        function click(str:String){
         Alert.show(str);
        }


    ]]>
</fx:Script>

<fx:Declarations>
    <!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>

/s:Application
哪位高手请指教一下

  • 写回答

1条回答 默认 最新

  • iteye_11438 2010-08-03 10:21
    关注

    btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){
    click(String(i));

    }
    );

    闭包中获得的i不是当前循环的i,而是当你点击按钮触发事件时,i的值。。
    flex很奇怪,在for循环中定义的i,在外部同样可以获得。

    正确的写法应该这样:
    [code="java"]
    function init():void{

    for(var i:int=0;i<10;i++){
    var btn:Button=new Button();
    btn.x=i*40;
    btn.y=i*20;
    btn.width=40;
    btn.height=20;

    this.addChild(btn);

    btn.addEventListener(MouseEvent.CLICK,clickfunc(i));

    }

    }
    function clickfunc(arg):Function{
    var func=function(e):void{
    click(arg)
    }
    return func;
    }

            function click(str:String){
                Alert.show(str);
            }
    

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?