理解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 相关文章推荐
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
Apr 15 Javascript
JQuery从头学起第一讲
Jul 04 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
Jan 22 Javascript
使用javascript实现Iframe自适应高度
Dec 24 Javascript
jQuery实用技巧必备(上)
Nov 02 Javascript
jquery实现输入框实时输入触发事件代码
Dec 21 Javascript
Vue.js之slot深度复制详解
Mar 10 Javascript
ReactNative之FlatList的具体使用方法
Nov 29 Javascript
详解Angular5 服务端渲染实战
Jan 04 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
layui select 禁止点击的实现方法
Sep 05 Javascript
JS如何生成随机验证码
Mar 02 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
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
php简单的上传类分享
2016/05/15 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
详解vue中localStorage的使用方法
2018/11/22 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python版大富翁源代码分享
2018/11/19 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
基于python3的socket聊天编程
2020/02/17 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
python regex库实例用法总结
2021/01/03 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
什么是继承
2013/12/07 面试题
销售冠军获奖感言
2014/02/03 职场文书
小学同学聚会感言
2015/07/30 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Python类方法总结讲解
2021/07/26 Python
聊聊redis-dump工具安装问题
2022/01/18 Redis