hasEventListener()方法:
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
willTrigger()方法:
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器.
hasEventListener() 与 willTrigger()的区别是:hasEventListener() 只检查它所属的对象,而 willTrigger() 检查整个事件流以查找由type参数指定的事件。
为了判断事件流的上游是否能处理某个事件,应该借助“willTrigger()”方法进行检查。当事件流的节点对象调用“willTrigger()”方法后,不仅检查调用该方法的对象,同时还会检查该对象的上游节点。如果发现相应的事件侦听器,则返回true。“willTrigger()”方法虽然简单,但是不能提供确切的事件侦听器数目。
如果在代码中遍历事件流对象,并配合“hasEventListener()”方法,能够获得某个事件的侦听器数量。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();"> <mx:Script> <!--[CDATA[ private function init():void { this.stage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); // btn1.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); trace("hasEventListener: " + btn1.hasEventListener(MouseEvent.MOUSE_OUT)); trace("willTrigger: " + btn1.willTrigger(MouseEvent.MOUSE_OUT)); } private function onMouseOut(event:MouseEvent):void { // } ]]--> </mx:Script> <mx:Button x="183" y="242" label="Button" width="180" height="100" id="btn1"/> </mx:Application>
输出:
hasEventListener: false
willTrigger: true