Reputation: 91
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
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
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
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