AS3在功能中删除事件处理程序



我在第一个功能中添加了一个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);
}

发生了,因为您正在添加匿名函数作为侦听器

    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);

呼叫

您将必须找到一种使btnSelectedlistIndexNumerrorBoxOkHandler可见的方法,因为作为事件侦听器,它只能接受一个参数

最新更新