理解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 相关文章推荐
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
js实现页面转发功能示例代码
Aug 05 Javascript
Javascript数组与字典用法分析
Dec 13 Javascript
javascript实现数独解法
Mar 14 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
AngularJS实现ajax请求的方法
Nov 22 Javascript
javascript 删除数组元素和清空数组的简单方法
Feb 24 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
详解Vue.js中.native修饰符
Apr 24 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
PHP中的float类型使用说明
2010/07/27 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Python中的默认参数实例分析
2018/01/29 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
草船借箭教学反思
2014/02/03 职场文书
食品安全演讲稿
2014/09/01 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
社区综治工作汇报
2014/10/27 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
2015年共青团工作总结
2015/05/15 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
中秋晚会致辞
2015/07/31 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
导游词之桂林
2019/08/20 职场文书
800字作文之大雪
2019/12/04 职场文书
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL