10.3.3 管理事件监听器
10.3.3 管理事件监听器
除了创建事件监听器和调度事件之外,还可以使用EventDispatcher类提供的其他方法,对创建的事件监听器进行检查和删除等操作。
1.检查事件监听器
使用EventDispatcher类的willTrigger()和hasEventListener()方法,可以检测显示对象是否存在相应类型的事件监听器。如果在显示对象上发现特定事件类型的事件监听器,hasEventListener()方法将返回true。willTrigger()方法也会返回true,并且willTrigger()方法不但检查该显示对象上的监听器,还会检查该显示列表对象,在事件流所有阶段中的所有父级上的监听器。
这里只介绍hasEventListener()方法。该方法的语法定义如下:
public function hasEventListener(type:String):Boolean
参数type表示需要检查的事件类型。
下面创建一个检查事件监听器的示例,如代码10.4所示:
代码10.4 检查事件监听器
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initapp()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
//初始化程序
public function initapp():void
{
//添加事件监听器
but2.addEventListener(MouseEvent.CLICK,clickhandler);
}
//结果处理函数
public function clickhandler(e:Event):void
{
Alert.show("你选择了"+e.type+"操作");
}
public function check():void
{
//检查事件监听器
if(but2.hasEventListener(MouseEvent.CLICK))
{
Alert.show("【确定】按钮有单击事件监听器");
}
else
{
Alert.show("【确定】按钮没有单击事件监听器");
}
}
]]>
</mx:Script>
<mx:Button id="but2" label="确定" x="56" y="94"/>
<mx:Button id="but1" label="检查" click="check()" x="151" y="94"/>
</mx:Application>
在上述代码中,创建函数check(),在该函数中使用hasEventListener()方法检查按钮but2是否存在单击事件的事件监听器。设置按钮but1的click事件调用函数check()。具体的运行效果如图10-7所示。
图10-7 检查事件监听器
2.删除事件监听器
在程序开发过中,创建一个事件监听器之后,该事件监听器会一直工作,当事件监听器不再需要时,需要使用removeEventListener()方法进行删除。
removeEventListener()方法的语法定义如下所示:
public function removeEventListener(type:String,listener:Function,useCapture:Boolean=false):void
各参数说明:
l type:String 事件的类型。
l listener:Function 要删除的侦听器对象。
l useCapture:Boolean 指出是否为捕获阶段或目标阶段和冒泡阶段注册了侦听器,默认为false。如果为捕获阶段以及目标和冒泡阶段注册了侦听器,则需要对removeEventListener()进行两次调用才能将这两个侦听器删除,一次调用将useCapture()设置为true,另一次调用将useCapture()设置为false。
下面创建一个删除事件监听器的具体示例,如代码10.5所示:
代码10.5 删除事件监听器
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initapp()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
//初始化程序
public function initapp():void
{
//添加事件监听器
but2.addEventListener(MouseEvent.CLICK,clickhandler);
}
//结果处理函数
public function clickhandler(e:Event):void
{
Alert.show("你选择了"+e.type+"操作");
}
public function remove():void
{
//删除事件监听器
but2.removeEventListener(MouseEvent.CLICK,clickhandler)
}
]]>
</mx:Script>
<mx:Button id="but2" label="确定" x="56" y="94"/>
<mx:Button id="but1" label="删除" click="remove()" x="151" y="94"/>
</mx:Application>
在上述代码中,首先创建程序初始化函数initapp(),在该函数中创建单击“确定”按钮的事件监听器。接下来创建函数remove(),该函数被“删除”按钮的click事件调用,在remove()中,使用removeEventListener()方法删除“确定”按钮的单击事件监听器。
运行程序,单击“确定”按钮,将处理按钮的click事件,返回相应的信息。单击“删除”按钮后再单击“确定”,则不返回任何内容。
TAG:





