理解JS绑定事件


Posted in Javascript onJanuary 19, 2016

本文为大家详细分析了JS绑定事件,供大家参考,具体内容如下

绑定事件有兼容性问题,在IE早期版本中使用的是obj.attachEvent(),而其他浏览器使用的则是addEventListener()。
这两个方法都有三个参数,分别为:事件类型,事件函数,最后一个是布尔值,true或者是false。
true表示在事件捕获阶段执行,false表示在事件冒泡阶段执行。
由于IE只支持事件冒泡,所以同大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段,即默认为”false”
这样可以最大限度地兼容各种浏览器。 最好只在需要在是事件到达目标之前截获它的时候将事件处理程序添加到捕获阶段。 如果不是特别需要,不建议在事件捕获阶段注册事件处理程序。
兼容各浏览器的事件绑定:

function addEvent(obj, eventType, callback, bubble){
 if(obj.addEventListener){
  obj.addEventListener(eventType, callback, bubble);
 }else{
  obj.attachEvent(eventType, callback, bubble);
 }
 }

调用时,注意callback函数不需要加括号,与setTimeout类似。

这部分都比较容易理解,对于最后一个参数,相信很多人并不是非常理解,总之我还是需要写程序测试一下才真正弄通。

HTML部分内容:

<!doctype html>
<html lang="en">
  <head>
  <!--网站编码格式,UTF-8 国际编码,GBK或 gb2312 中文编码-->
    <meta charset="UTF-8">
    <meta name="Keywords" content="关键词一,关键词二">
    <meta name="Description" content="网站描述内容">
    <meta name="Author" content="">
    <title>Document</title>
  <!--css js 文件的引入-->
  </head>
  <body>
    <div id="out"> 
    <p>我是路人甲</p>
    <div id="middle"> 
      <div id="inner">最里面的</div> 
    </div> 
    <p>我是路人乙</p>
    </div>
  </body>
</html>

js内容:(第一种情况)

<script>
  var out = document.getElementById('out'); 
  var middle = document.getElementById('middle'); 
  var inner = document.getElementById('inner'); 
  //点击inner时,触发顺序为:inner-------middle------out
  out.addEventListener('click',function(){alert("我是最外面的");},false);   
  middle.addEventListener('click',function(){alert("我是中间的");},false);    
  inner.addEventListener('click',function(){alert("我是最里面的");},false); 
</script>

js内容:(第二种情况)

<script>
  var out = document.getElementById('out'); 
  var middle = document.getElementById('middle'); 
  var inner = document.getElementById('inner'); 
  //点击inner时,触发顺序为:out------inner-------middle
  out.addEventListener('click',function(){alert("我是最外面的");},true);   
  middle.addEventListener('click',function(){alert("我是中间的");},true);  
  inner.addEventListener('click',function(){alert("我是最里面的");},true); 
</script>

js内容:(第三种情况)

<script>
  var out = document.getElementById('out'); 
  var middle = document.getElementById('middle'); 
  var inner = document.getElementById('inner'); 
  //点击inner时,触发顺序为:out------inner-------middle
  out.addEventListener('click',function(){alert("我是最外面的");},true);   
  middle.addEventListener('click',function(){alert("我是中间的");},false);    
  inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>

js内容:(第四种情况)

<script>
  var out = document.getElementById('out'); 
  var middle = document.getElementById('middle'); 
  var inner = document.getElementById('inner'); 
  //点击inner时,触发顺序为:out-------middle------inner
  out.addEventListener('click',function(){alert("我是最外面的");},true);   
  middle.addEventListener('click',function(){alert("我是中间的");},true);  
  inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>

js内容:(第五种情况)

<script>
  var out = document.getElementById('out'); 
  var middle = document.getElementById('middle'); 
  var inner = document.getElementById('inner'); 
  //点击inner时,触发顺序为:middle-------inner------out
  out.addEventListener('click',function(){alert("我是最外面的");},false);   
  middle.addEventListener('click',function(){alert("我是中间的");},true);  
  inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>

js内容:(第六种情况)

<script>
  var out = document.getElementById('out'); 
  var middle = document.getElementById('middle'); 
  var inner = document.getElementById('inner'); 
  //点击inner时,触发顺序为:out-------inner------middle
  out.addEventListener('click',function(){alert("我是最外面的");},true);   
  middle.addEventListener('click',function(){alert("我是中间的");},false);    
  inner.addEventListener('click',function(){alert("我是最里面的");},true);
</script>

看完以上六种情况对应的结果,相信您已经能够深刻理解,最后一个参数为true或false的区别了。

Javascript 相关文章推荐
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
jQuery之自动完成组件的深入解析
Jun 19 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
Sep 09 Javascript
javascript复制粘贴与clipboardData的使用
Oct 16 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
Aug 24 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
通过bootstrap全面学习less
Nov 09 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
JavaScript架构localStorage特殊场景下二次封装操作
Jun 21 Javascript
从原生JavaScript到React深入理解
Jul 23 Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 #Javascript
jQuery unbind()方法实例详解
Jan 19 #Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
Jan 19 #Javascript
详解JavaScript对象序列化
Jan 19 #Javascript
学习JavaScript设计模式之单例模式
Jan 19 #Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 #Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 #Javascript
You might like
simplehtmldom Doc api帮助文档
2012/03/26 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
php之可变函数的实例详解
2017/09/13 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
python中的字典使用分享
2016/07/31 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
厂办主管岗位职责范本
2014/02/28 职场文书
出纳员岗位职责
2014/03/13 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
党员个人总结自评
2015/02/14 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
话题作文之诚信
2019/11/28 职场文书