理解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 格式化时间日期函数小结
Mar 20 Javascript
JavaScript基本编码模式小结
May 23 Javascript
node.js实现多图片上传实例
Jun 03 Javascript
jQuery中:checkbox选择器用法实例
Jan 03 Javascript
javascript折半查找详解
Jan 26 Javascript
AngularJS自定义服务与fliter的混合使用
Nov 24 Javascript
js和jquery中获取非行间样式
May 05 jQuery
js 获取json数组里面数组的长度实例
Oct 31 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
Sep 19 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
实用函数4
2007/11/08 PHP
php入门小知识
2008/03/24 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
浅谈PHP的反射机制
2016/12/15 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
Python fileinput模块使用实例
2015/06/03 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
python 字典的打印实现
2019/09/26 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
高一历史教学反思
2014/01/13 职场文书
成立公司计划书
2014/05/07 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
政府会议通知范文
2015/04/15 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书