Кажется, что C и B являются дочерними элементами A. Но если C не является дочерним по B, он не будет пузыряться от C до B. Bubbling работает только от ребенка к родительскому. Но если B и C являются детьми из A и вы добавили C после B, это не значит, что C стал дочерним по отношению к B.
Вот почему обработчики событий выполняются, чтобы они были добавлены. У вас есть 2 решения:
1.swap добавления обработчиков
C.addEventLisener(MouseEvent.MouseDown,handler2);
B.addEventLisener(MouseEvent.MouseDown,handler1);
2.Use event priorities
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
}
Ваше первое решение невозможно из-за логики моей программы и вашего второго решения: handler1 все еще звонит? – sami
@sami да, вам нужно будет сделать B.removeEventListener (MouseEvent.MOUSE_DOWN, handler1); in handler2 –
О, так плохо! я не могу этого сделать! Мне нужно, чтобы B и C оба имели свое событие Listeners все время :( – sami