javascript - 父事件结束时子听众是否被销毁?

标签 javascript event-listener

例如,如果您有以下代码,当 mousedown 未发生时,mousemovemouseup 事件是否会被销毁?

var el = document.getElementById('mydiv');
el.addEvenListener('mousedown', function(event){ 
  initializeStuff();

  document.onmousemove = function(event) {
    event = event || window.event;
    showDragAnimation();
  };

  doucment.onmouseup = function() {
    showFinalPosition();
  };

}, false);

最佳答案

不,它们不会被破坏 - mousedown 并不知道“没有发生”。由于 JS 不会并发运行,因此无论如何这都没有意义。

如果您的代码确实使用了 addEventListener,它将严重泄漏事件处理程序并且您的应用程序会变得非常迟钝(每次点击都会变得更迟钝)。只有当您使用旧的 on... 属性覆盖以前的监听器时,您才能避免这种命运。

你会想要使用

function onmousedown(event) {
    this.addEventListener("mousemove", onmousemove, false);
    this.addEventListener("mouseup", onmouseup, false);
    initializeStuff();
}
function onmousemove(event) {
    showDragAnimation();
}
function onmouseup(event) {
    this.removeEventListener("mousemove", onmousemove);
    this.removeEventListener("mouseup", onmouseup);
    showFinalPosition();
}

document.getElementById('mydiv').addEvenListener('mousedown', onmousedown, false);

关于javascript - 父事件结束时子听众是否被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681601/

相关文章:

javascript - jQuery 移动 radio 事件监听器

java - 我可以将 Java 的 BufferedReader 与事件监听器而不是 while(true) 一起使用吗?

javascript - 不要在循环 Javascript 中创建函数

JavaScript:getElementById 在 IE8 中不起作用

javascript - Reactjs 在删除未使用的 firebase 配置导入时呈现空白页面

javascript - 单击其他位置时隐藏 div 菜单

java - Swing 和 AWT 混合不好,但还是做了,为什么?

javascript - Angular Universal 的事件监听器替代方案

javascript - 一次从数组中取出三个元素

javascript - 部署的 aurelia web 应用程序与在 gulp 上本地运行的应用程序有何不同