js 获取元素绑定事件的列表 chrome getEventListeners、 Events-EventListenerList 、$._data(a[0], 'events').click[0].handler

分类:Javascript| 发布:raodaor| 查看: | 发表时间:2016/5/26

技术上有什么办法获得指定 HTMLElement 上有绑定那些 #JavaScript 函数事件,及其处理函数么?

比如我有一个按钮,想知道他绑定了那些事件? click 事件的处理函数是什么?

elem.onclick 这种只能绑定唯一的一个事件处理函数,可以直接取到。

DOM Level 3 有 [http://www.w3.org/TR/2001/WD-DOM-Level-3-Events-20010823/events.html#Events-EventListenerList eventListenerList] 接口,但是现在还没有浏览器实现。

不过可以通过框架包装的方式获取列表。 另外 Google Chrome 浏览器的开发者工具有提供查看元素绑定了哪些事件的特性, 猜测是通过解析页面及其引入的 JavaScript 源码得到的 (据我所知,Firebug 的性能分析就是通过 inject 代码到各个函数中来实现的)。

延伸阅读

  • http://www.w3.org/TR/2001/WD-DOM-Level-3-Events-20010823/events.html#Events-EventListenerList
  • http://www.quirksmode.org/js/events_advanced.html

Chrome浏览器方法:getEventListeners

在控制台的listener中,只能显示函数的第一行,如果你写的函数是多行的,那就需要把命令打全了:

getEventListeners(document.getElementById("btn1")).click[0].listener

console会把函数的全部都打印出来。

jQuery读取事件列表的方法:

$(function(){

$("#atest1").click(function(e){

console.log("进入a链接跳转2");

location.href="http://www.baidu.com/?t="+new Date().getTime();

console.log("a链接跳转已经执行3");

});

setTimeout(function(){

document.addEventListener('click', function(e){

console.log("document事件捕获开始1");

// 通知浏览器不要执行与事件关联的默认动作。

// e.preventDefault();

console.log(e.toElement);

//控制台执行有效

//getEventListeners($("a#atest1").get(0)).click[0].remove();

// 显示当前目标元素的绑定事件有哪些

var a=$(e.toElement);

var p = $._data(a[0], 'events').click[0].handler;

if(p.toString().indexOf("location")>0){

 $._data(a[0], 'events').click[0].handler=function(){}

}

$.get("http://www.raodaor.com/test/tag.ashx?stm=1464233065021", function(){

console.log("ajax");

if(p.toString().indexOf("location")>0){

$._data(a[0], 'events').click[0].handler=p();

}

});

}, true);

},1000);

});

 

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/javascript/2264.html