首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法removeEventlistener

无法removeEventlistener
EN

Stack Overflow用户
提问于 2013-02-08 10:07:29
回答 3查看 180关注 0票数 0

我无法删除rute_button的事件,rute_button.removeEventlistener不工作。函数tampil_rute(t)有什么问题吗?谢谢..

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-08 10:52:02

问题出在tampil_rute(t)返回的函数中,每次调用此函数都会返回一个Function类型的新对象,如果要删除事件侦听器,则必须确保将相同的对象(函数)传递给removeEventListener函数。

您可以按如下方式进行修复:

代码语言:javascript
复制
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
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-08 10:34:33

fenixkim是正确的,匿名函数返回的事件处理程序是不可访问的,因为没有对它的引用。

不过,另一种解决方案是将t存储在变量中。这样,我们消除了对匿名函数的需要,并简化了事件处理程序的删除。

代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-08 10:41:19

不需要传入add/remove eventListener的参数。

代码语言:javascript
复制
rute_button.addEventListener(MouseEvent.CLICK, tampil_rute);
rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14764599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档