JS怎么移除元素绑定的所有事件
我们在开发和使用组件时,难免会遇到需要销毁组件的需求,在组件销毁时,需要移除组件绑定的所有事件,那么该如何快速移除元素绑定的所有事件呢?
移除元素绑定事件,有以下几种方式:
element.removeEventListener()
1 | element.removeEventListener('click', handler1); |
需要知道绑定的所有事件句柄,并一一移除,比较麻烦。
element.onclick = null
1 | element.onclick = handler1; |
这种方式只能移除指定类型(如 click)的事件,需要知道所有的事件类型并重置。
element.detachEvent()
只在 IE9 及以下有效,类似于 element.removeEventListener()。
element.setAttribute()
1 | element.addEventListener('click', handler1); |
这种方式需要知道绑定事件的所有方式,并逐一移除。
element.eventName = null
1 | element.onclick = handler1; |
这种方式可以高效移除指定元素的所有事件,但是也带来破坏封装性的缺点,不推荐在库/框架中使用。
推荐在开发中使用
element.removeEventListener()
逐一移除事件,或element.onclick = null
清空指定事件类型的所有事件。不推荐使用element.eventName = null
,因为此方式会影响组件的封装性。