2014-02-22 57 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