2016-06-25 6 views
0

Я добавление EventListener в первой функции и желание избавиться от него во втором. Удаление eventListener не работает, и поэтому каждый последующий вызов первой функции добавляет больше обработчиков событий. Я знаю, что один способ обойти это - не добавлять в функцию функцию eventListener, но делать это таким образом, это избавит меня от работы для остальной части кода. Есть идеи?AS3 удаление обработчика событий внутри функции

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

ответ

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

вызов

Вы должны найти способ сделать btnSelected и listIndexNum видно из errorBoxOkHandler, потому что, как слушателя событий он может принять только один аргумент

Смежные вопросы