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 相关文章推荐
JavaScript 通过模式匹配实现重载
Aug 12 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
Dec 12 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
Jan 13 Javascript
js对象转json数组的简单实现案例
Feb 28 Javascript
js计算文本框输入的字符数
Oct 23 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
全面介绍javascript实用技巧及单竖杠
Jul 18 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
基于jstree使用AJAX请求获取数据形成树
Aug 29 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
angularjs 的数据绑定实现原理
Jul 02 Javascript
vue地址栏直接输入路由无效问题的解决
Nov 15 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
php smarty模版引擎中的缓存应用
2009/12/11 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
浅析Git版本控制器使用
2017/12/10 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
VC++笔试题
2014/10/13 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
Java 在生活中的 10 大应用
2021/11/02 Java/Android
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL