事件绑定之小测试  onclick && addEventListener


Posted in Javascript onJuly 31, 2011

开发工具中应该有相应的功能,于是测试之:
前提:只是一个简单的小测试,而且 addEventListener 属于标准绑定函数,IE 中与此不兼容(IE 相应的是 attachEvent),所以此次测试先抛弃 IE,使用 Firefox 5.0.1, Chrome 14.0, Opera 11.50
测试页面:

<!DOCTYPE html> 
<html> 
<head> 
<title>Test</title> 
<style type="text/css"> 
.test { 
background-color: #FFF; 
border: 1px solid gray; 
height: 100px; 
width: 100px; 
margin: 0 10px 0; 
float: left; 
} 
</style> 
</head> 
<body> 
<div id="test1" class="test" onclick="console.log('test1 : click!');" onmouseover="console.log('test1 : mouseover!');">TEST1</div> 
<div id="test2" class="test">TEST2</div> 
<div id="test3" class="test">TEST3</div> 
<script type="text/javascript"> 
(function(){ 
var $ = function(o){//Simple Tool 
return document.getElementById(o); 
} 
//For Test2: 
$('test2').onclick = function(){console.log('test2 : click!');} 
$('test2').onmouseover = function(){console.log('test2 : mouseover!');} 
//For Test3: 
$('test3').addEventListener('click', function(){ 
console.log('test3 : click!'); 
}, false); 
$('test3').addEventListener('mouseover', function(){ 
console.log('test3 : mouseover!'); 
}, false); 
})(); 
</script> 
</body> 
</html>

页面效果如下截图:

 事件绑定之小测试  onclick &amp;&amp; addEventListener

测试代码中采用了三种最常见的事件绑定方法

FIREFOX:

1,Firefox 的 Firebug 中选中 test1 元素:

事件绑定之小测试  onclick &amp;&amp; addEventListener

右侧 DOM 标签中选择显示所有属性:

事件绑定之小测试  onclick &amp;&amp; addEventListener

在其中找到了 attributes 数组,如下:

事件绑定之小测试  onclick &amp;&amp; addEventListener

这是因为 test1 元素的两个事件句柄直接写到了元素中,再往下的列表中找不到更多相关的信息,此种绑定模式下只能在 firebug 的 DOM 标签的 attributes 中找到事件句柄。

2,选中 test2 元素:

事件绑定之小测试  onclick &amp;&amp; addEventListener

右侧 DOM 标签:

事件绑定之小测试  onclick &amp;&amp; addEventListener

test2 采用在 javascript 中绑定事件句柄的方式,被作为“用户自定义属性”显示在了 DOM 标签中,右击鼠标可以查看相关信息:

事件绑定之小测试  onclick &amp;&amp; addEventListener

3,选中 test3 元素:

事件绑定之小测试  onclick &amp;&amp; addEventListener

这次在 DOM 标签中没有找到任何相关此元素绑定事件的信息。。。

总而言之,firebug 中在标准绑定事件函数下(addEventListener),并不好检测到某个元素已绑定的事件函数,(不要说尝试打印一下那个元素的 onclick 属性,addEventListener 绑定和 onclick 绑定毫不相干,此种情况下你会得到 nudefined);如果是在前两种事件绑定下,可以得到一些简单信息。

-----

OPERA:

1,在 Opera 的 Dragonfly 中选中 test1 :

事件绑定之小测试  onclick &amp;&amp; addEventListener

在右方的属性列表中可以找到相关的信息:

事件绑定之小测试  onclick &amp;&amp; addEventListener

点击加号同样可以查看绑定的函数信息:

事件绑定之小测试  onclick &amp;&amp; addEventListener

想查看某个函数体的话,有一种简单的方法,在控制台中直接输入:

事件绑定之小测试  onclick &amp;&amp; addEventListener

直接就打印出函数体,更加的方便!

2,选择 test2 test1 几乎相同,就不在赘述了;

3,选择 test3:

事件绑定之小测试  onclick &amp;&amp; addEventListener

右方的属性标签里找不到什么了,onclick 和 onmouseover 的值都为 null。

总而言之,Opera Dragonfly 和 Firefox Firebug 表现差不多,对在标准绑定函数下 某个元素绑定了哪些事件表达得不是很清晰。

-----

CHROME:

Chrome 下就清晰很多了:

1,在调试工具中选择 test1(或者 test2,这两者类似)

事件绑定之小测试  onclick &amp;&amp; addEventListener

看看右侧的信息位:

事件绑定之小测试  onclick &amp;&amp; addEventListener

Chrome 中的 Event Listeners 是一个不错的小工具,直接罗列出当前选中元素上面已经被绑定的监听函数,点击小黑三角可以查看绑定函数的信息:

事件绑定之小测试  onclick &amp;&amp; addEventListener

click 中有两项,第一项是 div#test1,这个就是我们绑定的 onclick 函数信息;第二项的 document 可以不去看(Chrome 自身的处理);

isAttribute: true :说明此 onclick 函数句柄是作为元素属性来对待的(因为我们用的是 onclick = function(){…},不管是 test1 还是 test2);

lineNumber: 18 :说明绑定函数的位置;

useCapture: false : 说明不使用事件捕获;其他的语义性很强,就不说了;

同样,在 Properties 的第一个 HTMLDivElement 列表中,test1 和 test2 中都能看到:

事件绑定之小测试  onclick &amp;&amp; addEventListener

2,选中 test3

事件绑定之小测试  onclick &amp;&amp; addEventListener

在 Properties 中 onclick 和 onmouseover 都会变成 null,但是 Event Listeners 仍旧是:

事件绑定之小测试  onclick &amp;&amp; addEventListener

但是注意这里的 div#test3:

事件绑定之小测试  onclick &amp;&amp; addEventListener

isAttribute 变成了 false,因为我们没有使用 onclick 属性,而是用的 addEventListener。

先记这些吧!写得有点乱~

Javascript 相关文章推荐
JQuery Tips(4) 一些关于提高JQuery性能的Tips
Dec 19 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
Apr 02 Javascript
jQuery中not()方法用法实例
Jan 06 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
Oct 20 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
Sep 05 Javascript
BootStrap树状图显示功能
Nov 24 Javascript
webpack配置的最佳实践分享
Apr 21 Javascript
javascript实现文字无缝滚动效果
Aug 26 Javascript
React中的render何时执行过程
Apr 13 Javascript
vue使用Font Awesome的方法步骤
Feb 26 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
JS检测浏览器开发者工具是否打开的方法详解
Oct 02 Javascript
学习javascript,实现插入排序实现代码
Jul 31 #Javascript
映彩衣的js随笔(js图片切换效果)
Jul 31 #Javascript
IE6下focus与blur错乱的解决方案
Jul 31 #Javascript
EXTJS记事本 当CompositeField遇上RowEditor
Jul 31 #Javascript
Javascript 类、命名空间、代码组织代码
Jul 31 #Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 #Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
Jul 31 #Javascript
You might like
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
python判断字符串是否纯数字的方法
2014/11/19 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
python使用mysql的两种使用方式
2018/03/07 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
老公给老婆的保证书
2014/04/28 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
合作合同协议书范本
2015/01/27 职场文书
前台文员岗位职责
2015/02/04 职场文书
学期个人自我总结
2015/02/13 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL