我傳遞一些參數,每次我點擊一個影片剪輯事件的功能,而我並沒有意識到如何刪除它刪除傳遞參數
my_mc.addEventListener(MouseEvent.CLICK, someFunct(1,1));
我想這可能是工作,但它不是工作...
my_mc.removeEventListener(MouseEvent.CLICK, someFunct)
我傳遞一些參數,每次我點擊一個影片剪輯事件的功能,而我並沒有意識到如何刪除它刪除傳遞參數
my_mc.addEventListener(MouseEvent.CLICK, someFunct(1,1));
我想這可能是工作,但它不是工作...
my_mc.removeEventListener(MouseEvent.CLICK, someFunct)
我不認爲你張貼的語法實際工作,除非someFunct自己返回一個函數,它是實際的事件監聽器(例外的是,Flex有某些引擎蓋下的東西,會產生幻覺,你可以做到這一點)。無論如何,如果這個功能是以發佈的方式進行遠程工作的話,你所擁有的或多或少是一個匿名功能。
您可以刪除匿名函數的唯一位置是在偵聽器中。但是,偵聽器必須具有更常規的事件偵聽器簽名(具有單個參數即事件)。假設在你的代碼的某處有某人看起來像:
protected function someFunct(param1:int, param2:int):void { return function(e:MouseEvent):void { e.target.removeEventListener(e.type, arguments.callee); trace('in listener', param1, param2); } }
如果你正在使用Flex,我不認爲有一種方式來獲得的匿名函數創建哪裏讓聽者是除去。有關這些東西的工作原理,請閱讀this。
ofc它會返回一個函數...但我正在尋找一種方法來刪除那個沒有很多工作的監聽器D: – user2624407
您需要如果您想將其從偵聽器本身之外移除,請使用命名函數而不是匿名函數。或者你可以銷燬my_mc並將其從舞臺上移除。當它被垃圾收集時,關閉也是如此。 –
我做了一些測試,並想出瞭如何做到這一點。下面是一個測試.as主文件,只是將它作爲新的.fla文件的主要文檔類並運行它。你可以清楚地看到它的工作。至於你的例子,你可以用movieclip替換這個.stage。
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Main extends MovieClip {
public function Main() {
graphics.beginFill(0x000000, 1);
this.stage.addEventListener(MouseEvent.CLICK, someFunct(1, 1));
}
private function someFunct(p1:int, p2:int):Function {
return someFunct2
}
private function someFunct2(event:MouseEvent):void {
graphics.drawCircle(this.stage.mouseX, this.stage.mouseY, 50);
this.stage.removeEventListener(MouseEvent.CLICK, someFunct2)
}
}
}
如果沒有回答你的問題,請評論背部,或編輯你的問題,明確你真正想要的。謝謝
Try stopImmidiatePropagation();它會停止所有的錯誤
希望它會幫助
什麼是你得到的錯誤。相反,你覺得應該起作用的是什麼不工作。順便說一句,addEventListener中的'someFunct(1,1)'和removeEventListener中的'someFunct'似乎很腥! – catholicon
沒有錯誤,它只是不會刪除監聽器... – user2624407