我无法删除rute_button的事件,rute_button.removeEventlistener不工作。函数tampil_rute(t)有什么问题吗?谢谢..
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;
}发布于 2013-02-08 10:52:02
问题出在tampil_rute(t)返回的函数中,每次调用此函数都会返回一个Function类型的新对象,如果要删除事件侦听器,则必须确保将相同的对象(函数)传递给removeEventListener函数。
您可以按如下方式进行修复:
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
}发布于 2013-02-08 10:34:33
fenixkim是正确的,匿名函数返回的事件处理程序是不可访问的,因为没有对它的引用。
不过,另一种解决方案是将t存储在变量中。这样,我们消除了对匿名函数的需要,并简化了事件处理程序的删除。
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);
}发布于 2013-02-08 10:41:19
不需要传入add/remove eventListener的参数。
rute_button.addEventListener(MouseEvent.CLICK, tampil_rute);
rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute);https://stackoverflow.com/questions/14764599
复制相似问题