dikagaulzzz
dikagaulzzz

Reputation: 91

Can't removeEventlistener

I cant remove Event of rute_button, rute_button.removeEventlistener is not work. is there something wrong about function tampil_rute(t) ? thanks..

function tampil(t)
{
    rute_button.addEventListener(MouseEvent.CLICK, tampil_rute(t));
    //tampil_rute(t);
    var _loadertampil:URLLoader = new URLLoader();
    var _datatampil:XML = new XML();
    _loadertampil.addEventListener(Event.COMPLETE, readXMLtampil);
    _loadertampil.load(new URLRequest("http://localhost/mall_baru/tampil2.php?id="+t));
    function readXMLtampil(evttampil:Event)
    {
    _datatampil = new XML(evttampil.target.data);
    var tampilanx = _datatampil..tenant_name;
    tampilan.text = String(tampilanx);
    trace("tampilan ="+tampilanx);
    }
}
function tampil_rute(t)
{
    return function( f:MouseEvent ) 
    {
    var c = t.split("_", 2);
    var d:String = String(c[0]);
    var e:Number = Number(c[1]);
    for(var i:Number=1; i<=e; i++)
    {
        tambahan_tampil_rute(d,i);
    }
        rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute(t));
    }
}
function tambahan_tampil_rute(d, i)
{
    this["rute_"+d+"_"+i].visible=true;
}

Upvotes: 0

Views: 191

Answers (3)

khailcs
khailcs

Reputation: 318

fenixkim is right, the event handler returned by the anonymous function is not accessible because there is no reference to it.

An alternative solution though is to store t in a variable. That way, we eliminate the need for an anonymous function and simplify the removal of the event handler.

var t;

function tampil(t)
{
    this.t = t;
    rute_button.addEventListener(MouseEvent.CLICK, tampil_rute);
    // rest of code
}

function tampil_rute(e:MouseEvent)
{
    var c = t.split("_", 2);
    var d:String = String(c[0]);
    var e:Number = Number(c[1]);
    for(var i:Number=1; i<=e; i++)
    {
        tambahan_tampil_rute(d,i);
    }
    rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute);
}

Upvotes: 1

fenixkim
fenixkim

Reputation: 363

The problem is in the returned function by tampil_rute(t), each time you call this function this is returning a new object of type Function, if you want to remove the event listener, you must be sure to pass the same object (Function) to the removeEventListener function.

You can fix it as follow:

function tampil_rute(t)
{
    var listener:*; // create a variable to store your listener reference

    listener = function( f:MouseEvent ) 
    {
        var c = t.split("_", 2);
        var d:String = String(c[0]);
        var e:Number = Number(c[1]);
        for(var i:Number=1; i<=e; i++)
        {
            tambahan_tampil_rute(d,i);
        }

        rute_button.removeEventListener(MouseEvent.CLICK, listener); // Put the reference here
    }

    return listener; // Return the listener here
}

Upvotes: 1

Jono
Jono

Reputation: 4086

You don't pass in the parameter for add/remove eventListener.

rute_button.addEventListener(MouseEvent.CLICK, tampil_rute);
rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute);

Upvotes: 0

Related Questions