2010-07-20 145 views
2

我在遇到事件时无法在事件侦听器中添加新事件侦听器时停止在as3中传播。当我不想要它时,我的第二个事件监听器正在被调用。as3停止事件传播

this.addEventListener(MouseEvent.CLICK, firstlistener); 

function firstlistener(e:Event) 
{ 
    //do stuff 
    e.stopImmediatePropagation(); 
    this.addEventListener(MouseEvent.CLICK, secondlistener); 
} 
+2

如果此代码是你真正的代码,有一个语法错误:它不是如stopImidiatePropagation(); but e.stopImediatePropagation(); – 2010-07-20 16:04:30

+0

不是我真正的代码那只是一个错字 – jhultgre 2010-07-20 16:43:52

+3

其实,你们都有错别字。它是stopImmediatePropagation()...注意到这两个m – Boundless 2012-01-22 19:24:51

回答

4

您可以在同一时间同时添加firstListenersecondListener,但对于第一次设置优先级要高。这样它可以有条件地阻止传播到第二个。

this.addEventListener(MouseEvent.CLICK, firstlistener, false, 100); 
this.addEventListener(MouseEvent.CLICK, secondlistener); 

function firstlistener(e:Event) 
{ 
    if (...condition...) { 
     e.stopImmediatePropagation(); 
    } 
} 

,但如果你有超过两个听众的控制,那么它可能会更好有条件地从第一,第二或广播第二,不同的。比使用stopImmediatePropagation稍微清洁一些。

0

由于这是的MouseEvent,试图通过:

e:MouseEvent

为处理器的说法,而不是:

e:Event