理解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中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
浅谈JavaScript数据类型
Mar 03 Javascript
简介JavaScript中setUTCSeconds()方法的使用
Jun 12 Javascript
javascript实现自动输出文本(打字特效)
Aug 27 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
浅谈jQuery为哪般去掉了浏览器检测
Aug 29 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
JavaScript基础心法 数据类型
Mar 05 Javascript
js实现小星星游戏
Mar 23 Javascript
JS常见内存泄漏及解决方案解析
May 30 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 Try-catch 语句使用技巧
2016/02/28 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
javascript动态加载二
2012/08/22 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
Python调用命令行进度条的方法
2015/05/05 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Python如何省略括号方法详解
2020/03/21 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
波兰珠宝品牌:YES
2019/08/09 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
哈理工毕业生的求职信
2013/12/22 职场文书
幼儿园小班评语
2014/04/18 职场文书
2015年企业新年寄语
2014/12/08 职场文书
万里长城导游词
2015/01/30 职场文书
罚款通知怎么写
2015/04/22 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
创业计划书之农家乐
2019/10/09 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Python Socket编程详解
2021/04/25 Python
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript