(转AS3)使用闭包给事件监听附带参数
来源:互联网 发布:淘宝如何解除实名认证 编辑:程序博客网 时间:2024/06/06 20:33
情景再现:有5个按钮,变量名分别是btn1~btn5,需求就是需要在点击的时候知道到底点了第几个按钮,也就是需要获取到btnx中的x(那个文本框是infoTxt),看下面:
简单的做法:
for
(
var
i:
int
=
1
; i <=
5
; ++i)
{
this
[
"btn"
+i].addEventListener(MouseEvent.CLICK, onClick);
}
function
onClick(e:Event):
void
{
var
name_:
String
= e.target.name;
var
index:
int
=
int
(name_.substr(name_.length -
1
,
1
));
infoTxt.text=
"点击了"
+index+
"号按钮"
;
}
function
dispose():
void
{
for
(
var
i:
int
=
1
; i <=
5
; ++i)
{
this
[
"btn"
+i].removeEventListener(MouseEvent.CLICK, onClick);
}
}
很明显这样已经达到了想要的功能,但觉得这样的代码针对性太强,有可能我的按钮数量达到了2位数以上,那substr是不是要指定len为2呢?或者觉得这样写不够高端。。(很蛋疼是不是~)
为了简化代码,闭包很适时的出现在了我的脑海中,我们只要把 i 当成一个 upvalue ,这样就可以把这个值保存起来,在调用的时候直接拿参数就OK,看代码:
var
listenerList:
Array
= [];
for
(
var
i:
int
=
1
; i <=
5
; ++i)
{
var
f:Function = onClick(i);
this
[
"btn"
+i].addEventListener(MouseEvent.CLICK, f);
listenerList.push({elem:
this
[
"btn"
+i],eventType:MouseEvent.CLICK,func:f});
}
function
onClick(i_:
int
):Function
{
return
function
(e:Event):
void
{
infoTxt.text=
"点击了"
+i_+
"号按钮"
;
}
}
function
dispose():
void
{
for
each
(
var
obj:
Object
in
listenerList)
{
obj.elem.removeEventListener(obj.eventType, obj.func);
}
}
在事件监听的地方,使用闭包传递了一个 i 进去,返回了一个匿名方法,当然为了移除监听,我们需要把这个方法一起保存起来以便销毁。
当然两种方法都是可以解决问题的,能解决问题的方法都是好方法。
第一种方法甚至更简洁方便,不过多使用不同的技巧去实现功能需求对编程的能力增长还是很有意义的。
0 0
- (转AS3)使用闭包给事件监听附带参数
- 转:Flash as3 addEventListener事件监听传递参数
- As3 addEventListener事件监听传递参数
- as3中的addEventListener监听事件如何传参数
- FLASH AS3.0监听事件
- as3 监听函数传递参数
- as3给按钮添加事件
- AS3中通过事件监听传递参数以及动态变量传递的问题
- js 利用闭包循环给li绑定参数不同的点击事件
- AS3函数闭包
- AWT包和事件监听
- Flash AS3鼠标事件使用
- as3 自定义事件的使用
- AS3.0的 带参数 自定义事件
- AS3.0的 带参数 自定义事件
- JS中批量给元素绑定事件过程使用闭包解决
- javascript中循环加载监听事件的闭包问题
- js事件参数和闭包
- 使用单文档视图结构把Word嵌入到VC程序中(2)
- Java-Largest Number
- c# 实现mongodb的增、删、改、查
- 1.4.1 在Windows平台下启动和关闭MySQL服务
- map使用方法
- (转AS3)使用闭包给事件监听附带参数
- 对涂胶工艺认识的误区之七——一种涂胶机可以做出各种所需宽度的胶条
- 致我们的后青春
- Cocos2d-x扣血飘字特效用完你就消失--之游戏开发《赵云要格斗》(8)
- [C++]LeetCode: 97 Word Search (深度优先搜索)
- Financial Management
- tar命令
- shell文件操作(删除,显示,查找,增加,替换) sed用法
- 40个迹象表明你还是PHP菜鸟(转载)