可以检测addEventListener然后将其删除吗?

时间:2012-07-31 10:04:58

标签: actionscript-3 flash event-listener

我想这样做:

if (rightBtn.addEventListener(MouseEvent.CLICK,goRight4))
{
rightBtn.removeEventListener(MouseEvent.CLICK,goRight4);
trace("YES")
}
else{trace("NO")}

以上是我写给Button的代码。

我添加了eventListener,但结果仍然是NO。

有任何想法或正确的方法吗?

如果 rightBtn 有多个事件,比如MOUSE_OVER,MOUSE_OUT怎么办?我可以用1个命令删除它们吗?

rightBtn.addEventListener(MouseEvent.CLICK,goRight4)
rightBtn.addEventListener(MouseEvent.MOUSE_OVER,goRightOver)
rightBtn.addEventListener(MouseEvent.MOUSE_OUT,goRightOut)

if (rightBtn.addEventListener(MouseEvent.CLICK,goRight4))
{
rightBtn.removeEventListener(MouseEvent.CLICK,goRight4);
rightBtn.removeEventListener(MouseEvent.MOUSE_OVER,goRightOver);
rightBtn.removeEventListener(MouseEvent.MOUSE_OUT,goRightOut);
trace("YES")
}
else{
trace("NO")
}

2 个答案:

答案 0 :(得分:4)

你的代码错了。根据AS3语言参考,addEventListener()返回void。如果要检查监听器是否已附加到您的实例,则必须使用hasEventListener()

if (rightBtn.hasEventListener(MouseEvent.CLICK)) {
    rightBtn.removeEventListener(MouseEvent.CLICK, goRight4);
    trace("YES");
} else {
    trace("NO");
}

但删除事件侦听器的最佳方法是删除它而不知道它是否已附加到您的实例!

// Will not throw any error even if no listener was attached.
rightBtn.removeEventListener(MouseEvent.CLICK, goRight4);

答案 1 :(得分:3)

您可以使用hasEventListener()检查某个对象是否添加了一个事件监听器,如下所示:

if(rightBtn.hasEventListener(MouseEvent.CLICK))
{
    rightBtn.removeEventListener(MouseEvent.CLICK, goRight4);
    trace("YES");
}
else
{
    trace("NO");
}

你会注意到hasEventListener函数只有一个参数,即事件。但是在大多数情况下这是可以的,因为你可能没有一个事件的多个监听器函数。