javascript事件模型实例分析


Posted in Javascript onJanuary 30, 2015

本文实例讲述了javascript事件模型的用法。分享给大家供大家参考。具体分析如下:

一、事件模型

冒泡型事件(Bubbling):事件由叶子节点沿祖先节点一直向上传递到根节点
捕获型事件(Capturing):由DOM树最顶元素一直到最精确的元素,与冒泡型事件相反
DOM标准事件模型:DOM标准既支持冒泡型事件,也支持捕获型事件,可以说是两者的结合体,首先是捕获型,接着冒泡传递

二、事件对象

在IE浏览器中事件对象是window的一个属性,在DOM标准中,event必须作为唯一的参数传给事件处理函数

获得兼容的event 对象:

function(event){ 
  //event 是作为DOM标准的参数传入处理函数 
 event = event ?event : window.event; 
}

在IE中,事件的对象包含在event的srcElement中,而在DOM标准中,对象包含在target属性中
获得兼容的event 对象指向的元素:

var target =event.srcElement ? event.srcElement : event.target ;

前提是,保证event对象已经正确的获取

三、事件监听器

IE下,注册的监听器逆序执行,即后面注册的先执行

element.attachEvent('onclick',observer); //注册监听器
element.detachEvent('onclick',observer) //移除监听器

第一个参数为事件名称,第二个为回调处理函数

DOM标准下:

element.addEventListener('click',observer,useCapture) 
element.removeEventListener('click',observer,useCapture)

第一个参数为事件名称,没有“on”的前缀,第二个参数为回调处理函数,第三个参数说明回调函数是在捕获阶段调用还是冒泡阶段调用,默认true为捕获阶段

四、事件传递

兼容地取消浏览器的事件传递

function someHandler(event){ 
  event = event || window.event; 
  if(event.stopPropagation) //DOM标准 
  event.stopPropagation(); 
  else 
  event.cancelBubble = true; //IE标准 
}

取消事件传递后的默认处理

function someHandler(event){ 
  event = event || window.event; 
  if(event.preventDefault) //DOM标准 
  event. preventDefault (); 
  else 
  event.returnValue = true; //IE标准 
}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
JavaScript学习笔记之JS对象
Jan 22 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
JS中的进制转换以及作用
Jun 26 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
Feb 20 Javascript
ECMAScript6--解构
Mar 30 Javascript
Vue学习笔记进阶篇之单元素过度
Jul 19 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
JavaScript实现PC端横向轮播图
Feb 07 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
JS是按值传递还是按引用传递
Jan 30 #Javascript
js实现鼠标悬浮给图片加边框的方法
Jan 30 #Javascript
js控制输入框获得和失去焦点时状态显示的方法
Jan 30 #Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 #Javascript
js实现屏幕自适应局部代码分享
Jan 30 #Javascript
jQuery弹出框代码封装DialogHelper
Jan 30 #Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 #Javascript
You might like
js下函数般调用正则的方法附代码
2008/06/22 PHP
PHP5中虚函数的实现方法分享
2011/04/20 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python之PyUnit单元测试实例
2014/10/11 Python
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
社区工作者先进事迹
2014/01/18 职场文书
发布会邀请函
2015/01/31 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android