关于addEventListener和attachEvent

IE不对应addEventListener,只能使用attachEvent,所以首先需要判断你的浏览器对应的是哪个事件函数

if (window.addEventListener) {//for W3C DOM

window.addEventListener("load",HTMLArea.initOther, false);

} else if (window.attachEvent) {//for IE

window.attachEvent("onload",initOther);

} else  {

window.οnlοad= initOther;

}

接下来,让我们回到事件函数上来。

假设你想在窗口被加载的时候执行一个initOther的函数。

通常,我们会这么做

function initOther () {

//do something

}

window.onload =initOther;

但是,如果你的onload事件已经绑定了其他的方法,那么你绑定的那个方法就不会再被执行了。

比如:当你在绑定了initOther()方法之后另外在body上绑定了initMain()方法的话,initMain()方法就不会被执行!

<bodyοnlοad="initMain()">...</body>

我们希望的是这两个函数都被绑定到onload事件上,那么我们应该怎么做呢?

对,就是使用window.addEventListener/window.attachEvent方法

if (window.addEventListener) {//for W3C DOM

window.addEventListener("load",HTMLArea.initOther, false);

} else if (window.attachEvent) {//for IE

window.attachEvent("onload",initOther);

} else  {

window.οnlοad= initOther;

}

这里有个重点:

1. 当使用window.addEventListener的时候。

可以绑定多个方法,它们是有顺序的。根据你代码中add…的顺序来定。

2. 当使用window.attachEvent的时候。

你也可以绑定多个方法,但是IE很调皮,他会随机选定执行顺序。

细心的人会发现window.addEventListener的方法注册变量有3个。

第一个是要注册的事件名

第二个是要绑定的方法

那么第三个是什么呢?

探讨一下

这个参数叫做useCapture ,是一个boolean值,就是true orfalse。如果送出true的话就是浏览器会使用Capture方式,false的话是Bubbling,只有在特定状况下才会有影响,通常建议是false。而会有影响的情形是目标元素(target element)有祖先元素(ancestorelement),而且也有同样的事件对应函数,

我们来想象一下,架设有一大一小2个箱子,大箱子是红色的,小箱子是蓝色的。小箱子套在大箱子里面。形成父子关系。再假设他们都设定有click事件,一碰就会动。

那么,如果我在蓝色小箱子上click不只会触发蓝色小箱子的click 事件,还会同时触发红色大箱子上的click事件,而useCapture这个参数就是在控制这时候两个click事件的先后顺序。

如果是false,那就会使用bubbling,他是从内而外的流程,所以会先触发蓝色小箱子的click事件再执行红色大箱子的click事件,如果是true,那就是capture,和bubbling相反是由外而内,会先执行红色大箱子的click事件才执行蓝色小箱子的click事件。

那如果不同层的元素使用的useCapture不同呢?

就是会先从最外层元素往目标元素寻找设定为capture的事件,到达目标元素执行目标元素的事件后,再寻原路往外寻找设定为bubbling的事件。

(转自: 冷月听雨声 )

关于addEventListener和attachEvent的初步探讨相关推荐

  1. addEventListener和attachEvent二者绑定的执行函数中的this不相同【转载】

    yuanwen http://www.jb51.net/article/32511.htm 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前 ...

  2. 在英语课堂中培养学生音素觉知的初步探讨(Phonemic Awareness)

    From: http://blog.sina.com.cn/s/blog_4e8bd3550100c3kk.html Phonemic Awareness (2008-11-14 20:17:04)转 ...

  3. 字符集问题的初步探讨

    字符集问题的初步探讨 Oracle全球支持(即Globalization Support)允许我们使用本地语言和格式来存储和检索数据.通过全球支持,Oracle可以支持多种语言及字符集,得以展示数据库 ...

  4. addEventListener和attachEvent的区别

    转 addEventListener和attachEvent的区别 区别如下 addEventListener共有3个参数,如下所示: element.addEventListener(type,li ...

  5. SN-TOP架构的初步探讨——谈淘宝TOP平台的升级

    SN-TOP架构的初步探讨 --谈淘宝TOP平台的升级 文章全文将于12月10日发布,敬请关注!

  6. 初步探讨BitTorrent文件的结构

    初步探讨BitTorrent文件的结构 百度百科介绍: torrent文件本质上是文本文件,包含Tracker信息和文件信息两部分.Tracker信息主要是BT下载中需要用到的Tracker服务器的地 ...

  7. Javascript 的addEventListener()及attachEvent()区别分析

    Mozilla中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target: 文档节点.d ...

  8. 事件绑定-addEventListener()和attachEvent()的区别及用法

    JavaScript-DOM-事件绑定   当我们为元素绑定一个单击事件时,通常会想到element.οnclick=function(){},但是要绑定多个单击函数时却会失效,并且会被最新的响应函数 ...

  9. 初步探讨WPF的ListView控件(涉及模板、查找子控件)

    本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...

最新文章

  1. ie6下常见的bug 调整页面兼容性
  2. 一.jquery.datatables.js表格显示
  3. mysql查询员工表中所有员工入职20个月之后的日期_Mysql基础教程
  4. 服务器状态监控之一背景介绍及解决方案建议
  5. [转]URL汉字编码问题(及乱码解决)
  6. 如何让图像过渡更自然 python_如何过渡至 Python 3
  7. java 之 面试题-银行业务调度
  8. namesapce的作用 增加访问路径 目的:区分不同包的相同action的访问路径
  9. 【Paper】研究论文不会写?先来学学怎么做西红柿炒鹌鹑蛋吧!
  10. 如何设计良好的viewcontroller
  11. android tablet gps antenna,A Novel Tri-band GPS/WLAN Antenna for Tablet with Full Metal Housing
  12. python发送文件_Python大文件传输
  13. 帆软报表学习笔记②——行转列
  14. 微型计算机如何开声音,MP3声控录音机
  15. 树莓派 Pico Pi USB串口通信
  16. CryEngine5 Shader调试
  17. 1050: [HAOI2006]旅行comf
  18. 八旬老人守护病妻24年不弃 称爱就要守在一起
  19. 正则表达式验证手机号,邮箱
  20. 新兴顶级双非大学,计算机系毕业情况如何?

热门文章

  1. python 调用linux命令-Python 调用系统命令
  2. python入门要多久-初学者如何快速上手python入门要多久
  3. 自学python需要多长时间-零基础自学python要多久?
  4. python画散点图类型-绘制python中的线和散点图
  5. python简单编程例子-Python入门 —— 用pycharm写一个简单的小程序3
  6. python下载教程1001python下载教程-1001种玩法 | Python 学习指南资源
  7. python读取文件多行内容-Python逐行读取文件内容的方法总结
  8. yolov5 v3.0训练报错: torch.nn.modules.module.ModuleAttributeError: ‘BatchNorm2d‘ object has no attribute
  9. opencv实现人脸检测、性别和年龄预测
  10. lua学习笔记之元表和元方法