# Removing event listeners problem \[AS3\]

**URL:** <https://forum.kirupa.com/t/removing-event-listeners-problem-as3/294048>\
**Category:** flash\
**Created:** [August 7, 2009, 1:58pm UTC](https://forum.kirupa.com/t/removing-event-listeners-problem-as3/294048 "2009-08-07T13:58:57Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![fjckls](https://avatars.discourse-cdn.com/v4/letter/f/ecc23a/32.png) [@fjckls](https://forum.kirupa.com/u/fjckls)\
**Post date:** [August 7, 2009, 1:58pm UTC](https://forum.kirupa.com/t/removing-event-listeners-problem-as3/294048/1 "2009-08-07T13:58:57Z")

</div>

Hi,  
I have created particle effect adding onMouseMove random MC’s to stage.  
There are two buttons on stage. On MOUSE\_OVER I want to remove event listeners for particle effect and on MOUSE\_OUT i am adding back event listeners. It kind of works, but only with delay, please follow link provided to see it ([http://testing.fjofjo.net/](http://testing.fjofjo.net/)). You are still able to hover above buttons and eventlisteners are not removed, only when you stop on a button and last MC has been removed from display list - only then hand cursor appears and event listeners are removed. Why it doesn’t happen immediately , as soon as I’m over my buttons? How to remove eventListeners instantly?  
here is my code:

```php
import gs.*;
import gs.easing.*;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

stage.addEventListener(Event.RESIZE, resizeHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onLoop);

var sW:Number = stage.stageWidth;
var sH:Number = stage.stageHeight;

var back:Sprite = new Back(); // BACKGROUNG IMAGE
addChild(back);

var btn1:MovieClip = new Btn1(); // BUTTON 1
addChild(btn1);
var btn2:MovieClip = new Btn2(); // BUTTON 2
addChild(btn2);
btn1.y = btn2.y = sH + btn1.height*3; // SETTING Y VALUES FOR BUTTONS OUTSIDE THE STAGE FOR TWEENING

var btn1_y:Number = sH - btn1.height*3; // POSITION OF BUTTONS 
var btn2_y:Number = sH - btn1.height*3; // AFTER TWEENING TO STAGE

TweenLite.to(btn1, 0.7,{y:btn1_y, ease:Bounce.easeOut}); // TWEENING BUTTONS
TweenLite.to(btn2, 0.7,{y:btn2_y, ease:Bounce.easeOut}); // TO STAGE

btn1.buttonMode = btn2.buttonMode = true;

btn1.addEventListener(MouseEvent.MOUSE_OVER, btnOver); // ADDING
btn2.addEventListener(MouseEvent.MOUSE_OVER, btnOver);

btn1.addEventListener(MouseEvent.MOUSE_OUT, bntOut); // LISTENERS
btn2.addEventListener(MouseEvent.MOUSE_OUT, bntOut);

btn1.addEventListener(MouseEvent.MOUSE_UP, btn1Up); // TO BUTTONS
btn2.addEventListener(MouseEvent.MOUSE_UP, btn2Up);

function btnOver(e:MouseEvent):void { // THIS IS THE PROBLEM
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, onLoop);
                                                                // IT WORKS BUT WITH DELAY
} // IT DOESN'T REMOVE EVENT LISTENERS INSTANTLY
function bntOut(e:MouseEvent):void { // BUT ONLY WHEN onLoop FUNCTION IS DONE
    stage.addEventListener(MouseEvent.MOUSE_MOVE, onLoop); // ONLY WHEN LAST MOVIE CLIP HAS BEEN REMOVED FROM
} // DISPLAY LIST
function btn1Up(e:MouseEvent):void {                            
    trace("Button 1 was pressed"); // ALSO YOU CAN'T CLICK THE BUTTON
} // UNTIL ONLOOP FUNCTION IS DONE
function btn2Up(e:MouseEvent):void {
    trace("Button 2 was pressed");
}

resizeHandler(null); // INITIALIZE
function resizeHandler(event:Event):void {
    var sW:Number = stage.stageWidth;
    var sH:Number = stage.stageHeight;
    btn1.x = (sW/2) - btn1.width; // SETTING BUTTON X AND Y
    btn1.y = btn2.y = sH - btn1.height*3; // VALUES WHEN RESIZING
    btn2.x = (sW/2) + btn2.width; // THE STAGE

    back.width = sW; // X AND Y VALUES
    back.height = sH; // FOR BACKGROUND IMAGE
    back.x = back.y = 0; // ON RESIZING
}

var myFont:Font = new Diavlo();

function onLoop(e:MouseEvent):void {
        
        var sp:Sprite = new Sprite(); // HOLDER FOR ARRAY
        sp.x = mouseX;
        sp.y = mouseY;
        addChild(sp);

        var myArray:Array = ["A","a","&#256;","B","b","c","d","e","f","g","C","&#268;","D","E","&#274;","F",
                             "G","&#290;","H","I","&#299;","J","K","&#310;","L","&#316;","M","N","O","P","Q","R",
                             "S","T","U","&#363;","V","W","X","Y","Z","&#298;","Ž","Ä","Ö","Ü","ñ","õ",
                             "ç","&#280;","&#303;","&#371;","æ","ð","å","Æ","Ø"];
        var rn:Number = uint(Math.floor(Math.random()*myArray.length));

        var txtFmt:TextFormat = new TextFormat();
        txtFmt.font = myFont.fontName;
        txtFmt.size = 18;

        var txt:TextField = new TextField();
        txt.defaultTextFormat = txtFmt;
        txt.embedFonts = true;
        txt.text = myArray[rn];
        txt.selectable = false;
        sp.addChild(txt);

        var sw:Number = stage.stageWidth;
        var sh:Number = stage.stageHeight;
        var randX:Number = Math.random()*sw;
        var randY:Number = Math.random()*sh;
        var scaleRand:Number = Math.floor(Math.random()*7);

        sp.scaleX = sp.scaleY = scaleRand;
        TweenLite.to(sp, 2,{x:randX });
        TweenLite.to(sp, 2,{scaleX:.7, scaleY:.7,y:randY, overwrite:false,onComplete:remover});
        TweenLite.to(sp, 0.5,{overwrite:false, alpha:0, delay:0.7});

        function remover():void {
            removeChild(sp);
            sp = null;
    }
}

```

I have added my FLA too.  
Thank you!

P.S I use tweenLite engine.
