stopPropagation 在 flex 中不起作用



我有一个根分量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
}

相关内容

  • 没有找到相关文章

最新更新