DOM冒泡事件
一、注册事件的三种方式
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冒泡事件的更多相关文章
- dom 冒泡事件
<!doctype html> <html> <head> <meta charset="utf-8"> <style> ...
- 前端基本知识(一):W3C标准&&冒泡事件,捕获事件,W3C DOM对象模型,对比分析
W3C标准是万维网联盟, 其他的可以参考万维网版本的更新内容 一.W3C标准 二.W3C DOM事件 三.冒泡事件 四.捕获事件 一.W3C标准 其实网页是由三分部组成:1.结构(structure) ...
- Dom捕捉事件和冒泡事件-原理与demo测试
先参考一下百度百科对冒泡事件流的解释: ----------不喜欢读文字的同学,可以直接看下面demo,传递顺序简单明了! http://baike.baidu.com/link?url=kaeJHT ...
- w3c标准 dom对象 事件冒泡和事件捕获
http://www.cnblogs.com/chengxs/p/6388779.html http://www.jb51.net/article/42492.htm W3C标准是什么? 1.表现(c ...
- 整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件
整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的 ...
- jquery技巧之让任何组件都支持类似DOM的事件管理
本文介绍一个jquery的小技巧,能让任意组件对象都能支持类似DOM的事件管理,也就是说除了派发事件,添加或删除事件监听器,还能支持事件冒泡,阻止事件默认行为等等.在jquery的帮助下,使用这个方法 ...
- JS:event对象下的target属性和取消冒泡事件
1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = functi ...
- JQuery阻止冒泡事件on绑定中异常情况分析
科普下事件冒泡以及默认行为,以下面例子举列子: 事件冒泡:当点击内部button元素时,会触发自身及外层 a的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. 事件 ...
- Js 冒泡事件阻止
Js 冒泡事件阻止 1. 事件目标 现在,事件处理程序中的变量event保存着事件对象.而event.target属性保存着发生事件的目标元素.这个属性是DOM API中规定的,但是没有被所有浏览 ...
随机推荐
- Android WebView 加载网页
通过Android 中 WebView 控件加载HTML5 页面,这是实现Android 混合开发的基础. 选择加载的网页可以是本地,也可用使远程的.需要添加访问互联网的权限:<uses-per ...
- 微信公众号 订单 待发货-配送中-已收货 logic
w function logistics_sameorder($logistics) { $arr = array(); $tmp_wxout_trade_no = ''; $w = 0; $wi = ...
- <2014 05 09> 程序员:从C++转到Java需注意的地方
最近想玩玩Android的APP开发,从C++角度来学习Java.Java可以说是一个优化精简版的C++,去除了底层C的很多特性.找了这篇文章. --------------------------- ...
- 我的Android进阶之旅】GitHub 上排名前 100 的 Android 开源库进行简单的介绍
GitHub Android Libraries Top 100 简介 本文转载于:https://github.com/Freelander/Android_Data/blob/master/And ...
- beego——构造查询
QueryBuilder提供了一个简单.流畅的SQL查询构造器.在不影响代码可读性的前提下用来快速的建立SQL语句. QueryBuilder在功能上与ORM重合,但是个由利弊,ORM更适合用于简单的 ...
- go——变量
在数学概念中,变量(variable)表示没有固定值且可以改变的数.但从计算机系统实现角度来看,变量是一段或多段用来存储数据的内存.作为静态类型语言,Go语言总是有固定的数据类型,类型决定了变量内存的 ...
- jsp验证正则表达式
jsp验证正则表达式 下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多.特发出来,让各位朋友共同使用.呵呵. 匹配中文字符的正则表达式: [u4e00-u9fa5] ...
- PL/SQL编程—包
1.PLSQL 中的包就相当于java中的package,主要好处有(1)防止命名污染,(2)功能统一,(3)允许重载,(4)可以隐藏核心代码,(5)最重要的就是断开依赖链. 2.对于一个程序需要大量 ...
- HackerRank - common-child【DP】
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...
- $微信小程序开发实践点滴——Bmob基本REST API的python封装
Refer:Bmob后端云REST API接口文档:http://docs.bmob.cn/data/Restful/a_faststart/doc/index.html 本文使用python对Bmo ...