即使在元素被删除后,事件侦听器也会多次触发
Multiple firings of event listener even after element has been removed?
我使用这段代码在元素的CSS转换完成后从DOM中删除元素。
elem.addEventListener('transitionend',function(e) {
this.parentNode.removeChild(this);
}, false);
但是,由于转换会影响两个属性opacity 1->0,height 20px->0,因此事件会激发两次,第二次激发时会出现错误(因为此时元素已从DOM中删除)。
我试着测试了这处房产(如图所示:https://stackoverflow.com/a/18689069/1058739),但很明显,该测试反而失败了。
当然,当一个元素从DOM中删除时,所有附加到它的事件侦听器也应该被删除吗?
我错过了什么把戏?
感谢
为什么从DOM中分离元素会删除所有事件处理程序?元素仍然存在,只是不在DOM中。想象一下,试图将一个元素从一个父元素移动到另一个
element.parentElement.removeChild(element)
newParent.appendChild(element)
你真的认为分离所有事件处理程序是个好主意吗?
话虽如此,你可以通过两种方式解决你的问题。
检查元素是否有父
elem.addEventListener('transitionend', function(e) {
if (this.parentNode) {
this.parentNode.removeChild(this);
}
}, false);
或
分离事件侦听器
var onTransitionEnded = function (e) {
this.parentNode.removeChild(this);
this.removeEventListener('transitionend', onTransitionEnded);
}
elem.addEventListener('transitionend', onTransitionEnded)
相关文章:
- 如何在for循环中添加事件侦听器
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- javascript删除事件侦听器
- 我应该/如何清除mousemove JQuery事件侦听器
- 在JQuery中使用谷歌地图Api事件/侦听器
- 如何使用我的Jquery代码创建委托事件侦听器
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 为什么此事件侦听器不工作
- 仅当类存在于Javascript中时才允许侦听器事件运行
- 不确定Google Maps的侦听器事件中值为何未定义
- 如何向控件添加侦听器事件
- 无法在地图单击侦听器事件上显示另一个地图
- Chrome运行时OnMessage侦听器事件未启动