当触发事件时,Flex查找事件监听器将经历三个阶段:捕获阶段,定位阶段,冒泡阶段。以下是我对这三个阶段的理解,举例说明:
假设stage上一个btn,现在点击btn触发了一个事件event,之后Flex事件监听器:
1、首先捕获到event的是stage,将stage和event.target进行对比,修改event.currentTarget为stage,发现不相符,继续向下传递给mc,同理,再从mc传递给btn,此时event.target与之相符,currentTarget与target相同。(捕获阶段)
2、执行btn事件侦听函数。(定位阶段)
3、2完成后开始冒泡阶段,从btn返回mc,若mc有对应事件侦听函数,则执行,event.currentTarget同时改变为mc,同理,在交给stage同样的执行。
当然在很多时候,我们并不希望进行冒泡阶段,只希望执行btn的侦听函数,但是同时mc,stage刚好有对应的侦听函数,那么就会引起问题。处理方法为:在btn侦听函数结尾加入 event.stopPropagation(); 即可。
转自:http://minnychang.blogbus.com/logs/37078686.html
假设stage上一个btn,现在点击btn触发了一个事件event,之后Flex事件监听器:
1、首先捕获到event的是stage,将stage和event.target进行对比,修改event.currentTarget为stage,发现不相符,继续向下传递给mc,同理,再从mc传递给btn,此时event.target与之相符,currentTarget与target相同。(捕获阶段)
2、执行btn事件侦听函数。(定位阶段)
3、2完成后开始冒泡阶段,从btn返回mc,若mc有对应事件侦听函数,则执行,event.currentTarget同时改变为mc,同理,在交给stage同样的执行。
当然在很多时候,我们并不希望进行冒泡阶段,只希望执行btn的侦听函数,但是同时mc,stage刚好有对应的侦听函数,那么就会引起问题。处理方法为:在btn侦听函数结尾加入 event.stopPropagation(); 即可。
转自:http://minnychang.blogbus.com/logs/37078686.html