理解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 相关文章推荐
jquery动态加载图片数据练习代码
Aug 04 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
Jun 12 Javascript
JavaScript获取function所有参数名的方法
Oct 30 Javascript
EditPlus中的正则表达式 实战(2)
Dec 15 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
Mar 21 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
Javascript中弹窗confirm与prompt的区别
Oct 26 Javascript
Vue使用localStorage存储数据的方法
May 27 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
Sep 03 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 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 和 MySQL 基础教程(一)
2006/10/09 PHP
深入了解php4(2)--重访过去
2006/10/09 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
javascript模拟php函数in_array
2015/04/27 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
详解Python3中yield生成器的用法
2015/08/20 Python
python实现批量监控网站
2016/09/09 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
python logging设置level失败的解决方法
2020/02/19 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
DNA基因检测和分析:23andMe
2019/05/01 全球购物
JAVA和C++的区别
2013/10/06 面试题
弘扬职业精神演讲稿
2014/03/20 职场文书
大学生励志演讲稿
2014/04/25 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
校运会通讯稿
2015/07/18 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers