似乎,C 和 B 是 A 的孩子。但如果 C 不是 B 的孩子,它不会从 C 冒泡到 B。冒泡只能从孩子到父母。但是如果 B 和 C 都是 A 的孩子,而你在 B 之后添加了 C,这并不意味着 C 成为 B 的孩子。
这就是事件处理程序按添加顺序执行的原因。您有 2 个解决方案:
1.swap添加处理程序
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
也不会工作。您需要删除侦听器。
UPD
如果您不想删除侦听器,请使用布尔标志;
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
}