首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >removeEventListener不移除函数

removeEventListener不移除函数
EN

Stack Overflow用户
提问于 2014-02-22 11:58:58
回答 1查看 886关注 0票数 1

这是可行的,每次都删除timeListener

代码语言:javascript
复制
var timeListener;
var setPause = function (time) {
    var video = $("video").get(0);
    timeListener = function (){
        if (video.currentTime >= time && video.currentTime < (time + 0.3)) {
            video.pause();
        }
    }
    video.addEventListener('timeupdate', timeListener);
    video.removeEventListener('timeupdate', timeListener, false);
};

只是这不是我想要的,因为我显然不想立即删除事件侦听器。我希望它完成它的工作,然后在下一个视频加载时删除旧的侦听器。

然而,当我这样做时:

代码语言:javascript
复制
var timeListener;
var setPause = function (time) {
    var video = $("video").get(0);
    timeListener = function (){
        if (video.currentTime >= time && video.currentTime < (time + 0.3)) {
            video.pause();
        }
    }
    video.removeEventListener('timeupdate', timeListener, false);
    video.addEventListener('timeupdate', timeListener);
 };

removeEventListener不起作用,我最后得到了一个带有多个侦听器的视频标记。

我的理解是,您必须存储对该函数的引用,以便删除与添加的函数完全相同的函数。我认为,这2位代码之间唯一的区别是,在第二次调用time时,setPause的值已经发生了变化,而且由于第一个实例可以对time的不同值进行闭包访问,所以它被认为是不同的,而不是被删除的。我怎么才能绕过这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2014-02-22 13:35:15

对于任何感兴趣的人,我都通过在onClick调用的不同函数(实际上是ng-click,但相同的东西)中调用time来解决这个问题,然后才更改time的值。因此,正如我所怀疑的,问题是,当timeListener函数通过闭包访问不同的变量值时,它被认为是一个不同的函数。

在这个问题上被困了几个星期,所以这让我很开心!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21954001

复制
相关文章

相似问题

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