【冷知识】获取网页所有的监听事件类型、方法。请认准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");

打印效果


相关文章
|
7月前
|
移动开发 iOS开发
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
59 1
|
7月前
|
JavaScript
js实现跨浏览器tab选项卡页通信、传参,监听localStorage.变量的实时变化,实现打开多个浏览器页面窗口相互可以传参通信
js实现跨浏览器tab选项卡页通信、传参,监听localStorage.变量的实时变化,实现打开多个浏览器页面窗口相互可以传参通信
|
前端开发 数据库
通过ajax调用数据字典数据动态添加到网页下拉列表
通过ajax调用数据字典数据动态添加到网页下拉列表
|
前端开发 JavaScript
element组件的属性、事件和方法怎么使用
我们在使用element组件的时候,经常会使用到组件的属性、事件和方法,但对于第一次接触element组件的小白来说,由于没有代码示例,所以不知道怎么使用组件的属性、事件和方法是很常见的情况,所以本文将教会大家怎么去使用element组件的属性、事件和方法
421 0
element组件的属性、事件和方法怎么使用
|
前端开发 JavaScript
简单解析JavaScript的默认事件及如何阻止默认事件
简单解析JavaScript的默认事件及如何阻止默认事件 上篇文章就提到,在JavaScript中提到事件冒泡两个必不可少也要提的就是事件捕获和默认事件,现在来聊一聊什么是默认事件,及如何阻止默认事件。 1.什么是默认事件 顾名思义,默认事件就是默认执行的事件,比如 a标签,点击a标签,页面会自动跳转。如图: 在这里插入图片描述 HTML代码: &lt;form action=&quot;&quot;&gt; &lt;input type=&quot;submit&quot; id=&quot;submit&quot;&gt; &lt;input type=&quot;image&quot; src=&quot;../../CSS/0421/car.jpg&quot;
简单解析JavaScript的默认事件及如何阻止默认事件
|
前端开发
使用SpringMvc跨服务器上传图片,Ajax异步刷新图片框显示图片功能请求不到后台,onChange事件没有激活的源码?
使用SpringMvc跨服务器上传图片,Ajax异步刷新图片框显示图片功能请求不到后台,onChange事件没有激活的源码?
103 0
使用SpringMvc跨服务器上传图片,Ajax异步刷新图片框显示图片功能请求不到后台,onChange事件没有激活的源码?
|
JavaScript 前端开发 API
【千方百计】更改绑定的数据对象数值后,DOM重新渲染的4种方法
【千方百计】更改绑定的数据对象数值后,DOM重新渲染的4种方法
312 0
【千方百计】更改绑定的数据对象数值后,DOM重新渲染的4种方法
Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象
原文:Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象 原创文章,如需转载,请注明出处。   最近在一直研究Silverlight下的数据绑定控件,发现有这样两个接口IEditableObject 和IEditableCollectionView,记录一下结论,欢迎交流指正。
872 0
|
C#
WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged 事件。
2074 0
|
前端开发 容器
用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机
原文:用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机       在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打印或存档。
831 0