当事件'在相同事件类型的处理程序中注册的
Prevent firing an event when it's registered within a handler of the same event type
当我在另一个单击处理程序的过程中附加一个点击处理程序时,同一事件会立即触发新定义的处理程序。如何防止这种情况发生?
<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()" />
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- dropdown.js中的复杂事件处理
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 复选框,然后单击事件处理
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在 JavaScript 代码中调试点击事件处理
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 异步处理所有事件处理程序的方法