当事件'在相同事件类型的处理程序中注册的

Prevent firing an event when it's registered within a handler of the same event type

本文关键字:事件 处理 程序 注册 类型      更新时间:2023-09-26

当我在另一个单击处理程序的过程中附加一个点击处理程序时,同一事件会立即触发新定义的处理程序。如何防止这种情况发生?

<input onclick="document.body.addEventListener('click',function(){
  document.body.removeEventListener('click',this);alert('test');})">

在超时为0的setTimeout中结束您的添加。这将把你的代码块移动到执行队列的底部,并允许其他一切首先发生,包括与初始点击有关的任何其他事情的解决方案:

function attachHandler() {
    setTimeout(function() { 
        document.body.addEventListener('click',function listener() {
            this.removeEventListener('click', listener);
            alert('test');
        })
    }, 0});
}
<input onclick="attachHandler()" />