Skip to main content
August 7, 2011
Answered

Remove Multiple Event Listeners.

  • August 7, 2011
  • 1 reply
  • 1721 views

Hello,

In some cases it is important to remove multiple event listeners in order to reduce CPU time.

Below the code btn.removeEventListener(event.type, arguments.callee); at //x does not seem to work.

var btn:Array = [mc1,mc2];


main.addEventListener(MouseEvent.CLICK, Click);

mc1.addEventListener(MouseEvent.CLICK, one);

mc2.addEventListener(MouseEvent.CLICK, two);


function Click(event:MouseEvent):void

{

     for (var i:uint = 0; i<btn.length; i++)

     {

     //event.currentTarget.removeEventListener(event.type, arguments.callee);

//x btn.removeEventListener(event.type, arguments.callee);

     trace(btn); // [object MovieClip] two times, notably mc1 and mc2 respectively.

     }

}

function one(event:MouseEvent):void

{

     trace(event.currentTarget + " mc1 " + event.type); // [object MovieClip] mc1 click.

}

function two(event:MouseEvent):void

{

     trace(event.currentTarget + " mc2 " + event.type); // [object MovieClip], mc2 click.

}

Note that if we put the code event.currentTarget.removeEventListener(event.type, arguments.callee); inside function Click, it removes the listener fine.

The problem might be with the array but the trace in the for loop returns [object MovieClip] two times.

This topic has been closed for replies.
Correct answer kglad

not unless you know or can derive the listener functions references:

var btn:Array = [mc1,mc2];

var fA:Array=[one,two]


main.addEventListener(MouseEvent.CLICK, Click);

mc1.addEventListener(MouseEvent.CLICK, one);

mc2.addEventListener(MouseEvent.CLICK, two);


function Click(event:MouseEvent):void

{

     for (var i:uint = 0; i<btn.length; i++)

     {

     //event.currentTarget.removeEventListener(event.type, arguments.callee);

btn.removeEventListener(event.type, fA);

     trace(btn); // [object MovieClip] two times, notably mc1 and mc2 respectively.

     }

}

function one(event:MouseEvent):void

{

     trace(event.currentTarget + " mc1 " + event.type); // [object MovieClip] mc1 click.

}

function two(event:MouseEvent):void

{

     trace(event.currentTarget + " mc2 " + event.type); // [object MovieClip], mc2 click.

}

1 reply

kglad
Community Expert
Community Expert
August 7, 2011

you're not removing either mc1/mc2 listener because there is no such listener for mc1 or mc2:  neither listener calls Click.  ie, arguments.callee = Click

August 7, 2011

Is there a way to remove mc1 and mc2 listeners using the loop?

kglad
Community Expert
kgladCommunity ExpertCorrect answer
Community Expert
August 7, 2011

not unless you know or can derive the listener functions references:

var btn:Array = [mc1,mc2];

var fA:Array=[one,two]


main.addEventListener(MouseEvent.CLICK, Click);

mc1.addEventListener(MouseEvent.CLICK, one);

mc2.addEventListener(MouseEvent.CLICK, two);


function Click(event:MouseEvent):void

{

     for (var i:uint = 0; i<btn.length; i++)

     {

     //event.currentTarget.removeEventListener(event.type, arguments.callee);

btn.removeEventListener(event.type, fA);

     trace(btn); // [object MovieClip] two times, notably mc1 and mc2 respectively.

     }

}

function one(event:MouseEvent):void

{

     trace(event.currentTarget + " mc1 " + event.type); // [object MovieClip] mc1 click.

}

function two(event:MouseEvent):void

{

     trace(event.currentTarget + " mc2 " + event.type); // [object MovieClip], mc2 click.

}