额的神啊:AS3中Button被disable了,也会触发Click事件!
时间:2022-04-23
本文章向大家介绍额的神啊:AS3中Button被disable了,也会触发Click事件!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
btnTest.addEventListener(MouseEvent.CLICK,btnTestClick);
function btnTestClick(e:MouseEvent):void{
trace("我又被点了");
btnTest.enabled = false;
}
啥也不说了,看代码,然后测试:按钮(注:指SimpleButton而非组件中的Button)被disable后,依然可以触发Click事件,AS3的发明者为啥要这样设计呢?反正我是没理解,不过既然它已经这样了,就只能顺着它走了。
要想按钮事件仅被触发一次,正确的做法只能是removeEventListener
btnTest.addEventListener(MouseEvent.CLICK,btnTestClick);
function btnTestClick(e:MouseEvent):void{
trace("我又被点了");
btnTest.enabled = false;
btnTest.removeEventListener(MouseEvent.CLICK,btnTestClick);
}
后记:
事后仔细想了想Adobe为什么要这样设计?我想这或许就是Adobe与Microsoft的编程哲学观不同,在Adobe看来,事件监听就应该只负责事件监听,其它任何跟我无关的事情都不能影响我,即单一职责;而在Microsoft看来,各种设计之间应该相互协助,按钮在被disabled时,应该主动停止事件响应,而在enabled时恢复事件响应。
其实这种观念上的区别,在flash与sliverlight中有很多体现,比如在Flash中,一个Sprite只要你注册了Enter_Frame事件,不管该Sprite的实例有没有添加到显示列表,只要被new出来以后,Enter_Frame事件处理函数就会一直不停的跑,直接手动调用removeEventListener干掉事件监听;而在Sliverlight中,一个自定义的用户控件new出来以后,只要不被添加到(根)显示容器中,其对应的CompositionTarget.Rendering事件不会被触发的。
此外,仔细查看官方文档后,发现如果不用removeEventListener来处理,要想禁止鼠标事件响应,还有另一个属性mouseEnabled,把它跟enabled同时设置为false后,鼠标事件就不响应了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅析常见的算法范式
- 检查 JavaScript 变量是否为数字的几种方式
- 玩转Google Colab!附20种小技巧
- 猿实战19——商品发布之商详数据准备
- 【大家的项目】code-minimap
- 尤大 几天前发在 GitHub 上的 vue-lit 是啥?
- 用回溯算法求解数独问题
- bug 回忆录(四)
- 新手入门系列之-React / Vue 应用持续集成Docker 化
- Android 获取进程名函数,如何优化到极致?
- R语言做K均值聚类的一个简单小例子
- 如何自动化Salesforce应用程序
- 2万字带你学习Qos原理,还有6个实验案例,建议一定要收藏!
- 最全总结 | 聊聊 Python 数据处理全家桶(MongoDB 篇)
- R函数