我有一个根分量a和两个分量B,其中C在B的前面
B和C有EventListener
B.addEventLisener(MouseEvent.MouseDown,handler1);
C.addEventLisener(MouseEvent.MouseDown,handler2);
我希望当c捕获事件时它不会冒泡到B
i use
private function handler2(e:MouseEvent):void{
e.stopPropagation();
allowDraw = true;}
在handler2,但它不工作!
似乎,C和B是a的孩子,但如果C不是B的孩子,它不会从C冒泡到B。冒泡只能从孩子到父母。但是,如果B和C都是A的子元素,并且你在B之后加上C,这并不意味着C成为B的子元素。
这就是事件处理程序按添加顺序执行的原因。你有两个解决方案:
1。交换添加处理程序
C.addEventLisener(MouseEvent.MouseDown,handler2);
B.addEventLisener(MouseEvent.MouseDown,handler1);
2。使用事件优先级
B.addEventLisener(MouseEvent.MouseDown,handler1, false, 10);
C.addEventLisener(MouseEvent.MouseDown,handler2, false, 20);
此外,stopPropagation
也不能很好地工作。你需要删除监听器。
乌利希期刊指南
如果你不想删除监听器,使用布尔标志;
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
}