我有一个根组件A和两个组件B,C,C是B的前面
B和C有EventListener
B.addEventLisener(MouseEvent.MouseDown,handler1);
C.addEventLisener(MouseEvent.MouseDown,handler2);
我希望当c抓住事件时它不会冒泡到B
我用
private function handler2(e:MouseEvent):void{
e.stopPropagation();
allowDraw = true;}
在handler2中但它不起作用!
答案 0 :(得分:2)
似乎,C和B是A的孩子。但是如果C不是B的孩子,它不会从C到B冒泡。冒泡只能从孩子到父母。但是如果B和C都是A的孩子而你在B之后添加了C,那么这并不意味着C成为B的孩子。
这就是事件处理程序按照添加顺序执行的原因。你有两个解决方案:
1.swap添加处理程序
C.addEventLisener(MouseEvent.MouseDown,handler2);
B.addEventLisener(MouseEvent.MouseDown,handler1);
2.使用event priorities
B.addEventLisener(MouseEvent.MouseDown,handler1, false, 10);
C.addEventLisener(MouseEvent.MouseDown,handler2, false, 20);
此外,stopPropagation
也无效。你需要删除监听器。
<强> UPD 强>
如果您不想删除侦听器,请使用boolean flag;
private function handler2(e:MouseEvent):void {
e.stopPropagation();
allowDraw = true;
stop = true;
}
private function handler1(e:MouseEvent):void {
if (stop) {
stop = false;
return;
}
//handler code
}