2014-02-22 42 views
1

这个工作,timeListener每次都被删除。removeEventListener没有删除功能

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); 
}; 

只有它不是我想要的,因为我显然不想立即删除事件侦听器。我希望它能够做到这一点,然后在加载下一个视频时删除旧的侦听器。

然而,当我做到这一点

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不工作,我结束了与连接了多个监听器的视频标签。

这是我的理解,你必须存储一个引用的功能,以便完全相同的功能正在被删除作为一个被添加。我认为这两位代码之间的唯一区别在于后者中time的值已改变,因为setPause被称为第二次,并且由于第一个实例已关闭访问time的不同值,因此将其视为不同,并没有被删除。我怎样才能解决这个问题?

回答

0

任何有兴趣我在为time值被改变之前onClick(实际上ng-click但同样的事情)称为不同的函数调用removeEvenetListener解决了这个问题。因此,正如我怀疑的那样,问题是当timeListener函数通过闭包访问不同的变量值时,它被认为是一个不同的函数。

一直坚持这个问题几个星期,所以这使我的一天!

+0

在这里有同样的问题,但我没有按照你的思路 – RollRoll