理解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 相关文章推荐
JavaScript中获取元素索引的函数
Sep 10 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 Javascript
纯js写的分页表格数据为json串
Feb 18 Javascript
jQuery实现的仿select功能代码
Aug 19 Javascript
JS中的数组转变成JSON格式字符串的方法
May 09 Javascript
Vue.js中兄弟组件之间互相传值实例
Jun 01 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
jquery对table做排序操作的实例演示
Aug 10 jQuery
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
ES6中异步对象Promise用法详解
Jul 31 Javascript
vue首次渲染全过程
Apr 21 Vue.js
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,js双版本
2012/09/25 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
js function使用心得
2010/05/10 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
python中bisect模块用法实例
2014/09/25 Python
Python中文件的读取和写入操作
2018/04/27 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
设计师个人求职信范文
2014/02/02 职场文书
文明之星事迹材料
2014/05/09 职场文书
农村党员一句话承诺
2014/05/30 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
给病人的慰问信
2015/03/23 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python