javascript - 如何停止事件监听器,它在杀死它后甚至继续触发?

标签 javascript jquery google-chrome jquery-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');

最佳答案

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

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

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

...

mediaplay_video.removeEventListener('timeupdate', handleTimeUpdate);

关于javascript - 如何停止事件监听器,它在杀死它后甚至继续触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39072676/

相关文章:

javascript - 在显示新数据之前清除

javascript - 谷歌浏览器不阅读 Jsfiddle 程序

javascript - 获取缩放图像的高度

javascript - 在eslint中配置公共(public)文件路径

javascript - 禁用 JavaScript 的超链接

javascript - 在 Apache Cordova 中实现 CSS sidenav

javascript - 有没有办法在 Chrome 以外的其他浏览器上使用 Web Share Api

javascript - Firefox CSS 旋转不同于 Chrome 旋转

javascript - 如何使用 R 下载半损坏的 javascript asp 函数后面的文件

Javascript, Firebug : How do I have multiple views or what is the right of way of doing development?