javascript中查看元素事件函数的一些技巧

在分析一些网页的时候,经常会发现点击某个按钮会触发某个动作,当页面比较复杂,包含的js文件又多,这时候要找到这段触发函数的代码写在哪里就比较困难。比如,在某个html页面中,发现如下一个按钮,点击后会使得页面元素有变化。但是并未看到onclick事件,那说明该事件可能是通过javascript中的addEventListener方法绑定的(IE不支持该方法,使用的是attachEvent,不理解为微软何非要和W3C标准对着干)。例如下面的代码:

<input type="button" value="输入" id="btn1" name="n_btn1"/><label id="lbl"></label><br />
<script type="text/javascript">
            document.getElementById("btn1").addEventListener("click",
                function () {
                    alert("OK");
                });
  </script>

要看到btn1绑定的事件,可以通过chrome的事件监听实现。如下截图:

此外,可以通过命令,查看绑定的方法,在Chrome中的命令行方法,getEventListeners(object)获得,如下:

注意:getEventListeners方法是谷歌提供的供调试的命令行,并不是标准的javascript函数,只可以在chrome中的控制台中运行,与之类似的命令行还有很多,可以参考:

https://developer.chrome.com/devtools/docs/commandline-api(需翻墙)。

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

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

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

如果该段代码使用jquery绑定的,使用这种方法就会有点问题,比如,还是上面的代码,但是绑定方式如下:

    $(function () {
        $("#btn1").click(function () { alert(‘OK2‘) });
    });

通过jquery的click方法绑定了一个方法,结果发现listenerBody指向到了jquery的代码上去了,如下图:

这也正说明了,Jquery对于事件的绑定重新的定义了一套方法,所以此处看到的是Jquery的代码。

幸运的是,在jquery中,我们可以使用jQuery._data(element, "events")方法,关于这个方法的文档很少,官方文档在这里http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/,提及到该方法时一个内部方法,记录了所有元素的事件。Stackoverflow上有一个文章介绍了这个方法和Jquery.data的区别,地址http://stackoverflow.com/questions/7788353/whats-the-difference-between-jquery-data-and-jquery-data-underscore-data

此处,我们只需要知道这个方法可以用来实现我们的目的——查看元素所绑定的事件。我们只需在chrome的控制台里输入如下代码:

$._data($("#btn1")[0], ‘events‘);

注意,该方法的参数是DOM对象,不是jquery对象。因此需要加一个[0]来转成DOM对象。具体如下图:

我们在handler这个节点下,终于看到了该元素所绑定的事件了。

事实上,这个方法,可以写在js代码中,并且handler的值其实就是一个function,比如在代码中如下的写法:

var p = $._data($(‘#btn1‘)[0], ‘events‘).click[0].handler;
alert(typeof (p));
p();

可以看到弹出的类型就是p的类型就是function,并且可以直接调用p。

通过上面所说的方法,在分析复杂页面的时候,很容易找到事件的源头,跟踪代码,提高效率。

时间: 2024-10-17 15:30:41

javascript中查看元素事件函数的一些技巧的相关文章

Web-Lesson05-初识JavaScript:获取元素 事件

JavaScript:是一种脚本语言,动态类型.弱类型.通常用来操作HTML页面(HTML是骨架结构,CSS是样式装饰,JS是行为交互) 弱类型的体现: 一.JavaScript书写格式     1.Js代码写在哪里 1.JavaScript标签里. 2.写在外部.js后缀文件里,通过script标签引入(引入.js文件的script标签里,一定不能再写js代码,标签里写js代码一般情况不推荐) 2.script标签写在哪里 1.head里 2.body里(如果没有特殊要求,一般script标签

javascript中的立即执行函数(function(){…})()

javascript中的立即执行函数(function(){…})() 深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包住业务代码,使用jquery时比较常见. ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此.要

JavaScript 中对变量和函数声明的提前示例

如题所示,看下面的示例(可以使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发者工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter可以中途代码换行) var name = "xiaoming"; (function(){ var name = name || "小张"; console.info(name); })();// 小张 (function(){ name = name || "小张";

JavaScript中常用的事件

转自:http://www.cnblogs.com/dtdxrk/p/3551454.html 作者:文刀日月 JavaScript中常用的事件 事件委托 可以给元素添加多个事件 var addHandler = function(element,type,handler){ if(element.addEventListener){ element.addEventListener(type,handler,false); //false表示冒泡阶段 }else if(element.atta

深入理解javascript中的立即执行函数(function(){…})()

这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){-})()包住业务代码,使用jquery时比较常见,需要的朋友可以参考下http://www.jb51.net/article/50967.htm javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( function()

JavaScript中的内置函数

JavaScript中的内置函数 制作人:全心全意 在使用JavaScript语言时,除了可以自定义函数之外,还可以使用JavaScript的内置函数,这些内置函数是由JavaScript语言自身提供的. JavaScript中的内置函数如下表所示: 函     数 说     明 eval() 求字符串中表达式的值 isFinite() 判断一个数值是否为无穷大 isNaN() 判断一个数值是否为NaN parseInt() 将字符串型转换为整型 parseFloat() 将字符串型转换为浮点

javascript中的立即执行函数

javascript中的立即执行函数$(function(){ alert();}()) Highcharts的中的 series:[{ name: '今日在线人数', color: 'pink', data: (function(){ )()) }] #执行效果一样$( document ).ready(function() { console.log( "ready!" ); }); 和 $(function() { console.log( "ready!"

JavaScript中的Touch事件简介

在本教程中,我们可以通过检查触摸相关事件以及如何使用它们来检测和响应触摸和滑动事件,从而轻松获得JavaScript.随着基于触摸的设备数量不断增长,掌握这些事件对于理解老龄鼠标事件至关重要.本教程中的示例可以在触摸和非触摸启用的设备中进行应用,而后者则会回退到您信任的鼠标.准备给那些手指做一点锻炼吗?我们走吧! JavaScript触摸事件 所以让我们潜入它.以下列出了JavaScript中支持的触摸事件: JavaScript触摸事件 活动名称 描述 touchstart 当用户与触摸表面接

解决JavaScript中批量添加事件的问题

这是JavaScript中一个老生常谈的问题,也是初学者较难理解的问题.当给一系列元素添加事件时,常常会出现一些我们不希望出现的问题.例如以下代码: //给li元素批量添加click事件 window.onload = function(){ var lists = document.getElementsByTagName("li"); for(var i=0;i<lists.length;i++){ lists[i].onclick = function(){ alert(i