【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners

简介: 【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners

获取事件列表

getEventListeners(window)//获取window绑定的所有监听事件列表
 
//----------------------------------------
 
getEventListeners(document.querySelector("选择器"))//获取指定DOM的所有监听事件列表

这里以CSDN为例,F12当前页面在Console选项卡输入 getEventListeners(window),回车执行代码后会输出以下对象:

{
    "load": [
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"}
    ],
    "unload": [
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"}
    ],
    "beforeunload": [
        {"useCapture": false, "passive": false, "once": false, "type": "beforeunload"}
    ],
    "pagehide": [
        {"useCapture": false, "passive": false, "once": false, "type": "pagehide"},
        {"useCapture": false, "passive": false, "once": false, "type": "pagehide"}
    ],
    "error": [
        {"useCapture": false, "passive": false, "once": false, "type": "error"}
    ],
    "keydown": [
        {"useCapture": false, "passive": false, "once": false, "type": "keydown"}
    ],
    "resize": [
        {"useCapture": false, "passive": false, "once": false, "type": "resize"},
        {"useCapture": false, "passive": false, "once": false, "type": "resize"},
        {"useCapture": false, "passive": false, "once": false, "type": "resize"},
        {"useCapture": false, "passive": false, "once": false, "type": "resize"}
    ],
    "scroll": [
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"},
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"},
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"},
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"}
    ],
    "orientationchange": [
        {"useCapture": false, "passive": false, "once": false, "type": "orientationchange"}
    ],
    "pageshow": [
        {"useCapture": false, "passive": false, "once": false, "type": "pageshow"}
    ],
    "focus": [
        {"useCapture": false, "passive": false, "once": false, "type": "focus"}
    ],
    "blur": [
        {"useCapture": false, "passive": false, "once": false, "type": "blur"}
    ],
    "DOMContentLoaded": [
        {"useCapture": false, "passive": false, "once": false, "type": "DOMContentLoaded"},
        {"useCapture": false, "passive": false, "once": false, "type": "DOMContentLoaded"},
        {"useCapture": false, "passive": false, "once": false, "type": "DOMContentLoaded"}
    ],
    "keyup": [
        {"useCapture": false, "passive": false, "once": false, "type": "keyup"}]
};

获取事件绑定的方法源码

getEventListeners(window).事件名[0].listener;
 
//----------------------------------------
 
getEventListeners(document.querySelector("选择器")).事件名[0].listener;

触发事件绑定的方法

getEventListeners(window).事件名[0].listener();
 
//----------------------------------------
 
getEventListeners(document.querySelector("选择器")).事件名[0].listener();

移除对应绑定的事件监听(尤其是某些页面禁止了复制、切屏的时候屡试不爽,你懂得[坏笑])

var event=getEventListeners(window).事件名[0];
window.removeEventListener(event.type,event.listener);
 
//----------------------------------------
 
var dom=document.querySelector("选择器");
var event=getEventListeners(dom).事件名[0];
dom.removeEventListener(event.type,event.listener);

批量移除所有监听事件(硬核!)

var events=getEventListeners(window)
for (var eventName in events) {var eventItems = events[eventName];
    console.log(event);
    for (var i = 0, l = eventItems.length; i < l; i++) {
        var eventItem = eventItems[i];
        window.removeEventListener(eventItem.type,eventItem.listener);
    }
}
 
//----------------------------------------
 
var dom=document.querySelector("选择器")
var events=getEventListeners(dom)
for (var eventName in events) {var eventItems = events[eventName];
    console.log(event);
    for (var i = 0, l = eventItems.length; i < l; i++) {
        var eventItem = eventItems[i];
        dom.removeEventListener(eventItem.type,eventItem.listener);
    }
}

批量移除并打印指定DOM及其子元素所有监听方法代码(实用!)

var getAllEvents = function (sel) {
    var doms = [document.querySelector(sel)].concat([].slice.call(document.querySelectorAll(sel + " *")));//包括元素自己
    for (var i = 0, l = doms.length; i < l; i++) {
        var dom = doms[i];
        var events = getEventListeners(dom);
        for (var eventName in events) {
            var eventItems = events[eventName];
            for (var j = 0, len = eventItems.length; j < len; j++) {
                var eventItem = eventItems[j];
                dom.removeEventListener(eventItem.type, eventItem.listener);//移除事件
                console.log(`事件[${eventItem.type}]监听方法`, eventItem.listener);
            }
        }
    }
};
getAllEvents(".className");

打印效果


相关文章
|
3月前
两个按钮共享一个函数事件
两个按钮共享一个函数事件
18 1
|
4月前
|
JavaScript
vue 数据变化触发页面响应的三种方式(解决:数据变化页面无响应/不刷新的问题)【含原理】
vue 数据变化触发页面响应的三种方式(解决:数据变化页面无响应/不刷新的问题)【含原理】
299 0
|
6月前
|
前端开发 JavaScript 索引
改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法
改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法
47 2
|
6月前
|
Java
如何在事件处理方法中获取事件的来源对象?
如何在事件处理方法中获取事件的来源对象?
|
前端开发 数据库
通过ajax调用数据字典数据动态添加到网页下拉列表
通过ajax调用数据字典数据动态添加到网页下拉列表
|
JavaScript 前端开发 API
【千方百计】更改绑定的数据对象数值后,DOM重新渲染的4种方法
【千方百计】更改绑定的数据对象数值后,DOM重新渲染的4种方法
304 0
【千方百计】更改绑定的数据对象数值后,DOM重新渲染的4种方法
SwiftUI—如何实现对视图显示和消失事件的监听
SwiftUI—如何实现对视图显示和消失事件的监听
689 0
SwiftUI—如何实现对视图显示和消失事件的监听
|
前端开发 容器
用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机
原文:用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机       在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打印或存档。
827 0
错误:“ResourceDictionary”根元素需要 x:Class 特性来支持 XAML 文件中的事件处理程序。请移除 MouseLeftButtonDown 事件的事件处理程序.
原文:错误:“ResourceDictionary”根元素需要 x:Class 特性来支持 XAML 文件中的事件处理程序。请移除 MouseLeftButtonDown 事件的事件处理程序. 转载于(https://social.
2357 0