簡體   English   中英

as3-刪除其中已在addEventListener參數中定義函數的EventListener

[英]as3 - Removing EventListener where function has been defined in addEventListener parameters

如果我添加事件監聽器,如下所示:

 buttons[i][j].addEventListener(Event.ENTER_FRAME, function(e:Event){trace("foo");}); 

我將如何刪除此EventListener? 我已經嘗試過了,但是似乎沒有用。 :S

 buttons[i][j].removeEventListener(Event.ENTER_FRAME, function(e:Event){trace("foo");}); 

提前致謝!

你可以試試:

 myObject.addEventListener(Event.ENTER_FRAME, function(event:Event):void
 {
      // event.currentTarget (in this case myObject)
      // event.type (in this case Event.ENTER_FRAME)
      // arguments.callee (reference to the current function)
      event.currentTarget.removeEventListener(event.type, arguments.callee);
      trace("foo");
 });

當您定義在處理事件時調用的函數時,它將起作用。 在您的情況下:

buttons[i][j].addEventListener(Event.ENTER_FRAME, myFunction);

function myFunction(e:Event){
     trace("foo");
}

然后刪除EventListener:

buttons[i][j].removeEventListener(Event.ENTER_FRAME, myFunction);

希望這可以幫助。

根據定義,如果您匿名定義該偵聽器,則無法刪除該偵聽器。 這就是使用該語法的全部目的。 因此,如果您不是那個意思,那么您必須切換到已定義的偵聽器。 如果您確實要這樣做,則必須將weakReference用作:

addEventListener(Event.ENTER_FRAME, function(e:Event){trace("foo");}, false, 0, true);

最后一個參數“ true”使其變弱,並確保當引用的對象不再存在時,該事件將為gc。

在不將weakRefernce設置為true的情況下使用匿名偵聽器是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM