stopImmediatePropagation 与 stopPropagation 不同之处 请仔细查看加粗的文字并结合图例理解。
stopImmediatePropagation 防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。此方法会立即生效,并且会影响当前节点中的事件侦听器。
stopPropagation 防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。此方法不会影响当前节点 (currentTarget
)
中的任何事件侦听器。
测试代码:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" initialize="application1_initializeHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; protected function application1_initializeHandler(event:FlexEvent):void { btn.addEventListener(MouseEvent.CLICK,handler1); btn.addEventListener(MouseEvent.CLICK,handler2,false,1); group.addEventListener(MouseEvent.CLICK,handler3); this.addEventListener(MouseEvent.CLICK,handler4); } private function handler1(event:MouseEvent):void { trace("btn priority 0 handler"); event.stopPropagation(); } private function handler2(event:Event):void { trace("btn priority 1 handler"); } private function handler3(event:Event):void { trace("group handler"); } private function handler4(event:Event):void { trace("app handler"); } ]]> </fx:Script> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <s:layout> <s:VerticalLayout/> </s:layout> <s:Group id="group"> <s:Button label="Click" id="btn"/> </s:Group> </s:Application>
event.stopPropagation(),结果:
btn priority 1 handler
btn priority 0 handler
event.stopImmediatePropagation (),结果:
btn priority 1 handler