如何停止eventlistener,它甚至会在杀死它后继续触发?

时间:2016-08-22 06:34:10

标签: javascript jquery google-chrome javascript-events

我有以下执行视频剪辑的方法,并且在视频剪辑的进度中它会发出一个警报,在该警报之后,它假设关闭了侦听器,但它没有结束事件列表,因此警报会一直显示喜欢无限。

这是一个BUG吗?或者以下代码中缺少某些内容?

function video_present(input) {

  $('#mediaplayer').prop('loop', false); 
  $('#mediaplayer').attr('src', filename).show();
  mediaplay_video= document.getElementById('mediaplayer');  
  mediaplay_video.play();      

  // STOP repeating??
  mediaplay_video.addEventListener('timeupdate', function() {
    var sss = parseInt(mediaplay_video.currentTime % 60);
    show_second();
  }, false);  

}

// kill Event after 1 time execute of this
function show_second() {
  alert('I was executed - stop me now if you can??');
  mediaplay_video.removeEventListener('timeupdate', function() {
    alert('I am killed, but why am i again getting called???');
  });


}

video_present('Terminator_10.webm');

1 个答案:

答案 0 :(得分:2)

removeEventListener的第二个参数是监听器函数本身。如果您没有传递与addEventListener相同的参数,则不会删除它。使用命名函数或函数变量来确保在两个地方都使用相同的函数对象:

function handleTimeUpdate() {
  var sss = parseInt(mediaplay_video.currentTime % 60);
  show_second(); 
}

mediaplay_video.addEventListener('timeupdate', handleTimeUpdate, false);  

...

mediaplay_video.removeEventListener('timeupdate', handleTimeUpdate);