一、注册事件的三种方式

1 on的方式

语法:

事件源.on+事件名称 = 事件处理程序

例如:

btn.onclick = function(){}

细节:

只能注册一个事件处理函数

兼容:

所有主流浏览器都兼容

2   addEventListener

语法:

事件源.addEventListener(事件名称,事件处理程序,在哪个阶段执行)

例如:

btn.addEventListener(“click”,function (){},false)

细节:

事件名称不能带有on

可以为事件绑定多个处理程序

在事件处理函数中,this是对应的事件源

兼容:

ie8不支持

3   attachEvent

语法:

事件源.attachEvent(on+事件名称,事件处理程序)

例如:

btn.attachEvent(“onclick”,function(){})

细节:

也可以注册多个事件

注册的事件要带上on

在事件处理函数中,this是window

兼容

ie6到ie10支持,其余都不支持

4   注册事件的兼容写法

原理:

判断当前浏览器支持谁,支持哪个就用哪个来注册

function addListener(element,event,fn){

if (element.attachEvent){

element.attachEvent(“on”+event,fn)

}else if(element.addEventListener) {

element.addEventListener(event,fn,false)

}else {

element["on"+event] = fn;

}

}

二、移除事件绑定的处理程序

1 on的方式

方法:

事件源.on+事件名 = null;

2   removeEventListener

语法:

事件源.removeEventListener(事件名,处理程序,在哪个阶段)

例子:

btn.removeEventListener(“click”,clickHandel,false)

细节:

如果你在不同的阶段分别绑定了两个函数,要分开移除

移除的是使用addEventListener绑定的处理程序

兼容:

ie8不支持

3   detachEvent

语法:

事件源.detachEvent(on+事件名,处理程序)

例子:

btn.detachEvent(“onclick”,clickHandle)

细节:

移除的是使用attachEvent绑定的处理程序

兼容:

ie6-ie10支持,其余不支持

三、事件的三个阶段

事件的三个阶段分为:事件捕获阶段、事件目标阶段、事件冒泡阶段

要知道事件的阶段,需要通过一个属性: event.eventPhase

当eventPhase的值为1的时候,是事件捕获阶段,为2的时候是事件的目标阶段,为3的时候是冒泡阶段

事件在出现的时候

只会包含两个阶段:

a)    捕获和目标

b)    冒泡和目标

冒泡和捕获不会同时出现

三个阶段的异同:

事件在触发的时候,是有一个过程的

事件冒泡:后代元素触发某一个类型的事件,同时这个元素会传递到前代元素,并且触发前代元素的同类事件

事件捕获:发生某种类型的事件的时候,先有捕获的过程,先从前代元素递到触发事件的事件源子元素

事件目标阶段:事件触发到达事件源的时候

阻止冒泡

StopPropagation();//IE8不支持

CancelBubble=true;

On+eventType  相应的解绑方式:事件源.eventType=null;

AddEventListener  相应的解绑方式:事件源.removeEventListener(type,已经绑定的处理程序的函数名,对应的阶段);

以匿名函数的时候绑定的,是无法解绑的

如果绑定的时候,执行处理程序的阶段不同(第三个参数的true和false不同),在解绑的时候,也必须使用相应的触发阶段才能成功解绑,简而言之,如果是绑定的时候是false,解绑的时候也必须是false

解绑的时候只会解绑相同的函数名,如果不同就不会解绑,同名的函数重复绑定无效

attachEvent   相应的解绑方式:事件源.detachEvent(“on”+type,对应的绑定的函数名);、如果是以匿名函数的方式,也是无法解绑

每次解绑,函数名必须相同,否则不会解绑

总结:是用什么方式绑定事件处理程序,就必须使用相应的解绑方式解绑

四、事件的类型

得知事件的类型也是通过事件的一个属性获得

event.type

得到的是不带on的事件名称

利用这个属性,我们可以实现给一个元素注册多个事件,却调用同一个函数

DOM冒泡事件的更多相关文章

  1. dom 冒泡事件

    <!doctype html> <html> <head> <meta charset="utf-8"> <style> ...

  2. 前端基本知识(一):W3C标准&&冒泡事件,捕获事件,W3C DOM对象模型,对比分析

    W3C标准是万维网联盟, 其他的可以参考万维网版本的更新内容 一.W3C标准 二.W3C DOM事件 三.冒泡事件 四.捕获事件 一.W3C标准 其实网页是由三分部组成:1.结构(structure) ...

  3. Dom捕捉事件和冒泡事件-原理与demo测试

    先参考一下百度百科对冒泡事件流的解释: ----------不喜欢读文字的同学,可以直接看下面demo,传递顺序简单明了! http://baike.baidu.com/link?url=kaeJHT ...

  4. w3c标准 dom对象 事件冒泡和事件捕获

    http://www.cnblogs.com/chengxs/p/6388779.html http://www.jb51.net/article/42492.htm W3C标准是什么? 1.表现(c ...

  5. 整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件

    整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的 ...

  6. jquery技巧之让任何组件都支持类似DOM的事件管理

    本文介绍一个jquery的小技巧,能让任意组件对象都能支持类似DOM的事件管理,也就是说除了派发事件,添加或删除事件监听器,还能支持事件冒泡,阻止事件默认行为等等.在jquery的帮助下,使用这个方法 ...

  7. JS:event对象下的target属性和取消冒泡事件

    1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = functi ...

  8. JQuery阻止冒泡事件on绑定中异常情况分析

    科普下事件冒泡以及默认行为,以下面例子举列子:     事件冒泡:当点击内部button元素时,会触发自身及外层 a的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. 事件 ...

  9. Js 冒泡事件阻止

    Js 冒泡事件阻止   1. 事件目标 现在,事件处理程序中的变量event保存着事件对象.而event.target属性保存着发生事件的目标元素.这个属性是DOM API中规定的,但是没有被所有浏览 ...

随机推荐

  1. <2014 04 16> 上班实习第一天

    找了家开发3D printer的创业公司实习,做(嵌入式)软件工程师.今天第一天. 1.熟悉了基于SLA技术的3D打印机的主要关键问题,机械结构. 控制系统是基于PC-Clinet和一个树莓派ARM/ ...

  2. 在.NET中读取嵌入和使用资源文件的方法

    转http://www.jb51.net/article/84660.htm 本文分别介绍了使用GetManifestResourceStream读取嵌入资源,和使用. resx资源文件嵌入资源,希望 ...

  3. time/datetime/random/string/os/sys/shutil/zipfile/tarfile - 总结

    time 模块: time.time() #时间戳 time.localtime() #当前时间对象元组 time.localtime(123123) #根据时间戳的时间对象 time.mktime( ...

  4. mybatis框架(三)

    mybatis框架

  5. FatMouse and Cheese---hdu1078(记忆化搜索=搜索+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意就是有n*n的地图,每个地方都有食物,数量不同,老鼠在(0,0)的位置每次它最多跳 k 步, ...

  6. Java保留字和关键字

    Java的关键字:java的关键字对Java的编译器有着特殊的意义,它们表示一种数据类型或者程序的结构相关. Java的保留字:为Java预留的关键字,现在还没用到,但在新Java的版本升级中可能会用 ...

  7. 七牛云 如何配置域名的 CNAME

    CNAME 简介 CNAME 即指别名记录,也被称为规范名字.这种记录允你将多个名字映射到同一台计算机. 当需要将域名指向另一个域名,再由另一个域名提供 ip地址,就需要添加 CNAME 记录. 为什 ...

  8. sql查询原理和Select执行顺序

    一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图的 ...

  9. MySQL 多表查询(Day43)

    阅读目录 一,介绍 二,多表连接查询 三,符合条件链接查询 四,子查询 五,综合练习 ========================================================= ...

  10. Typecho部署安装

    此文章已经在这里上. 如果您看到这篇文章,表示您的 blog 已经在digitalocean.com安装成功.下面说下安装的步骤,此文章都是在digitalocean.com的centos上成功安装: ...