理解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查看对象功能代码
Apr 25 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
javascript解析json实例详解
Nov 05 Javascript
jquery结婚电子请柬特效源码分享
Aug 21 Javascript
jQuery实现的登录浮动框效果代码
Sep 26 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
vue项目刷新当前页面的三种方法
Dec 04 Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 Javascript
js实现3D旋转效果
Aug 18 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 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 裁剪图片成固定大小代码方法
2009/09/09 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
php实现简单加入购物车功能
2017/03/07 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
python将字符串转换成数组的方法
2015/04/29 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
网站编辑求职信
2013/10/17 职场文书
卫校毕业生自我鉴定
2013/10/31 职场文书
家长对孩子评语
2014/01/30 职场文书
开业典礼主持词
2014/03/21 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
今日说法观后感
2015/06/08 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android