[英]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.