理解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中为元素加上name属性的方法
May 09 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
Jun 14 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
Nov 02 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
Bootstrap table 定制提示语的加载过程
Feb 20 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
node删除、复制文件或文件夹示例代码
Aug 13 Javascript
VUE路由动态加载实例代码讲解
Aug 26 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 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
收音机的保养
2021/03/01 无线电
php查找字符串出现次数的方法
2014/12/01 PHP
PHPMailer发送邮件
2016/12/28 PHP
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
AngularJS的$location使用方法详解
2017/10/19 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
pandas 选择某几列的方法
2018/07/03 Python
Python饼状图的绘制实例
2019/01/15 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python识别验证码的思路及解决方案
2020/09/13 Python
如何查看python关键字
2021/01/17 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
物控部经理职务说明书
2014/02/25 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
导游词之岳阳楼
2019/09/25 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
python三子棋游戏
2022/05/04 Python