3 回答

TA贡献2012条经验 获得超12个赞
如果不拦截addEventListener呼叫并跟踪侦听器,或者不幸的是使用允许此类功能的库,则无法实现。如果可以访问listeners集合,但未实现该功能,那就应该是这样。
您可以做的最接近的事情是通过克隆元素来删除所有侦听器,这不会克隆侦听器集合。
注意:这还将删除元素子级上的侦听器。
var el = document.getElementById('el-id'),
elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);

TA贡献1784条经验 获得超8个赞
如果通过删除侦听器的唯一目的是阻止它们运行,则可以将事件侦听器添加到捕获并取消给定类型的所有事件的窗口中:
window.addEventListener(type, function (event) {
event.stopPropagation();
}, true);
传入true第三个参数会导致事件在下传中被捕获。停止传播意味着事件永远不会到达正在侦听该事件的侦听器。

TA贡献1877条经验 获得超1个赞
我知道这很老了,但是我遇到了类似的问题,没有真正的答案,我想从文档中删除所有“ keydown”事件侦听器。我没有删除它们,而是覆盖了addEventListener以在它们被添加之前忽略它们,类似于上面的Toms回答,通过在加载任何其他脚本之前添加它来实现:
<script type="text/javascript">
var current = document.addEventListener;
document.addEventListener = function (type, listener) {
if(type =="keydown")
{
//do nothing
}
else
{
var args = [];
args[0] = type;
args[1] = listener;
current.apply(this, args);
}
};
</script>
添加回答
举报