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
}