在触发此类事件时添加EventListener而不会触发它

时间:2011-10-10 12:19:09

标签: actionscript-3

当释放转义键时,我将最深的孩子关在树状结构中,然后告诉它的父(现在是新的“最深的孩子”)在释放转义键时关闭......但是当触发这样的事件时,我会这样做,这会导致整个链条关闭。

有关如何克服此问题的任何提示?

3 个答案:

答案 0 :(得分:1)

尝试在侦听器的末尾添加event.stopImmediatePropagation()

答案 1 :(得分:0)

查看在Event实例上调用stopPropagation()是否有效。

答案 2 :(得分:0)

不确定如何处理它,但在下面的示例中,我确保删除最深的孩子上的事件监听器,然后再将其添加到下一个孩子。

当然,您可以添加stopImmediatePropagation()方法,如其他答案中所述,以确保事件不会冒泡到其他对象。我不确定事件冒泡会影响此示例中剩余的子节点,但如果确实如此,那肯定是问题的答案,您可以在调用initEvent()之前的任何地方调用eventHandler函数中的该方法。 / p>

private function initEvent(child:Sprite):void
{
    child.addEventListener( KeyboardEvent.KEY_UP , eventHandler );
}

private function eventHandler(event:KeyboardEvent):void
{
   if( event.charCode == //whatever the charCode is for the escape key )
   {
       var deepestChild:Sprite = event.currentTarget;
       deepestChild.removeEventListener( KeyboardEvent.KEY_UP , eventHandler );

       var parent:Sprite = deepestChild.parent;
       parent.removeChild(deepestChild );

       if( parent != null )
           initEvent( parent )

   }
}