额的神啊: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后,鼠标事件就不响应了。

时间: 2024-09-12 07:01:36

额的神啊:AS3中Button被disable了,也会触发Click事件!的相关文章

Leave事件中最后执行了Focus()后再次触发Leave事件是为什么呀?【在线等】

问题描述 Leave事件中最后执行了Focus()后再次触发Leave事件是为什么呀? 解决方案 解决方案二:因为你当前鼠标位置就是不在控件上啊执行了Focus,获得焦点,相当于鼠标进入了一次然后你鼠标在外面,马上又会触发离开解决方案三:比如这是控件A的Leave事件,当焦点离开的时候触发控件A的leave事件,在A控件的Leave事件中最后一行,我把焦点赋给了B控件,为什么会触发A控件的Leave事件呢??解决方案四:引用1楼Z65443344的回复: 因为你当前鼠标位置就是不在控件上啊执行了

jQuery中click事件的定义和用法_jquery

本文实例讲述了jQuery中click事件的定义和用法.分享给大家供大家参考.具体分析如下: 当鼠标指针在匹配元素上方,然后按下并松开鼠标左键或者调用click()方法都会触发click事件. click()方法也可以绑定事件处理方法. 语法结构一: 触发click事件. 复制代码 代码如下: $(selector).click() 语法结构二: 为click事件绑定事件处理方法. 复制代码 代码如下: $(selector).click(data,function) 参数列表: 参数 描述 d

jQuery中click事件用法实例_jquery

本文实例讲述了jQuery中click事件用法.分享给大家供大家参考.具体分析如下: 当鼠标指针在匹配元素上方,然后按下并松开鼠标左键或者调用click()方法都会触发click事件. 一个完整的事件过程,不但要有能够触发事件的条件,而且还要有事件处理程序. 可以通过click()方法为click事件绑定事件处理程序.例如: 复制代码 代码如下: $("button").click(function(){$("div").css("color",

求大神c#winform中如何用按钮(button)来按照两个DateTimePicker的时间来搜索内容

问题描述 求大神c#winform中如何用按钮(button)来按照两个DateTimePicker的时间来搜索内容 就是一个按钮(button)为搜索按钮,要按照DateTimePicker的一个是开始时间,一个是结束时间来搜索相应的内容,搜到后再把数据返回到listview中,代码该如何实现,越详细越好,急用......谢谢! 解决方案 你要查询的数据是什么样的,数据库数据还是? 解决方案二: 你要查的数据在那个文档呐.?

android-求大神指导Android中重写SimpleAdapter类引getCount空指针异常,万分感谢

问题描述 求大神指导Android中重写SimpleAdapter类引getCount空指针异常,万分感谢 重写的BaseAdapter: public class MyAdapter extends BaseAdapter { List<UserInfo> userInfos=new ArrayList<UserInfo>(); Context context; public MyAdapter(Context cList<UserInfo> userInfos) {

广电总局重申“方言令”“额滴神”以后听不到

额滴神呀!额错了,额真滴错了,额就不该说额额额--额不说额额额,额怎么会那么火-- 一堆抓抓鸟抓抓半天也抓抓不出个普通话来!(抓抓,是用麻雀的叫声形容女人们在一起说话)对对对,方言死球了! 相关新闻: 迫于广电总局禁令 方言版<潜伏>昨晚停播 <决战南京>不符方言限令 陈宝国重新配音 本报讯 当<武林外传>中的"佟湘玉"和<走西口>中的"豆花"把满口的"额额额"改为"我我我",她

问一下大神这个c++中的这些算法是怎么运行的

问题描述 问一下大神这个c++中的这些算法是怎么运行的 问一下大神这个c++中的这些算法是怎么运行的 例如 unique_copy 求大神解释详细一点 谢谢 解决方案 ........... 解决方案二: 拷贝,但是遇到重复的只保留一个http://www.cnblogs.com/heyonggang/archive/2013/08/07/3243477.html 解决方案三: 按步骤来 解决方案四: 你是不知道怎么运行的, 还是不知道怎么执行的.?

Android Listview中Button按钮点击事件冲突解决办法

  今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录下,以便日后参考.      首先,其实Listview中Button按钮点击事件冲突这种问题压根就不是太大的问题,因为我们完全可以将一个TextView的Backgroud设置成一个selector,也可以将一个TextView设计成一个按钮的样子,这样就可以绕过ListView和Button

.net中调用隐藏服务器控件button的click事件

问题描述 .net中调用隐藏服务器控件button的click事件 在ASP.NETt中,需要通过JS调用一个服务器按钮控件的click事件调用后台事件,但是如果按钮的display设置为none之后在遨游浏览器可以通过document.getElementByID(""button1"").click()来调用,在IE或者是360浏览器中则调用了,但是没有效果,却也刷新了页面! 解决方案 用fiddler检查下有没有回发产生,看看是不是被360等流氓软件干扰了.