AS3删除函数中的事件处理程序

时间:2016-06-25 04:10:26

标签: actionscript-3

我在第一个函数中添加了一个eventListener,希望在第二个函数中删除它。删除eventListener似乎不起作用,因此每次对第一个函数的后续调用都会添加更多事件处理程序。我知道解决这个问题的一种方法是不在函数中添加eventListener,但这样做会为我的其余代码节省大量的工作。有什么想法吗?

function errorBoxHandler(event:Event):void
{
    this.errorBox.errorOkBtn.addEventListener(
        MouseEvent.MOUSE_DOWN, 
        function(event:MouseEvent)
        {
            errorBoxOkHandler(event, btnSelected, listIndexNum)
        }
    );
}

function errorBoxOkHandler(event:MouseEvent, btnSelected:String, listIndexNum:int):void
{    
    this.errorBox.errorOkBtn.removeEventListener(MouseEvent.MOUSE_DOWN, errorBoxOkHandler);
}

1 个答案:

答案 0 :(得分:0)

这是因为您要将匿名函数添加为侦听器

    this.errorBox.errorOkBtn.addEventListener(MouseEvent.MOUSE_DOWN, 
        function(event:MouseEvent){//here
           errorBoxOkHandler(event, btnSelected,listIndexNum)
    });

直接添加errorBoxOkHandler作为侦听器:

this.errorBox.errorOkBtn.addEventListener(MouseEvent.MOUSE_DOWN, errorBoxOkHandler);

将使用

删除它
this.errorBox.errorOkBtn.removeEventListener(MouseEvent.MOUSE_DOWN,errorBoxOkHandler);

调用

您必须找到一种方法,使btnSelectedlistIndexNum可以从errorBoxOkHandler看到,因为作为事件监听器,它只能接受一个参数