jQuery学习4 浏览器的事件模型


Posted in Javascript onFebruary 07, 2010

首先要知道DOM的两级模式:DOM0级和DOM2级

在DOM0级事件处理程序是通过把函数实例的引用指派到DOM元素的属性而声明的。

声明DOM第0级事件处理程序

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>DOM Level 0 Events Example</title> 
<script type="text/javascript" src="../scripts/jquery-1.2.1.js"> 
</script> 
<script type="text/javascript"> 
$(function(){ 
$('#vstar')[0].onmouseover = function(event) { 
say('Whee!'); 
} 
}); function say(text) { 
$('#console').append('<div>'+new Date()+' '+text+'</div>'); 
} 
</script> 
</head> 
<body> 
<img id="vstar" src="vstar.jpg" onclick="say('Vroom vroom!')"/> 
<div id="console"></div> 
</body> 
</html>

事件冒泡:在目标元素获得机会处理事件之后,事件模型检查目标元素的父元素,看是否为同类型事件建立了处理程序。如果是,则也调用父元素的处理程序。再检查其父元素,直至检查到DOM树的顶部,这个过程称之为事件冒泡。

事件传播从起点到DOM树的顶部

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html id="greatgreatgrandpa"> 
<head> 
<title>DOM Level 0 Bubbling Example</title> 
<script type="text/javascript" src="../scripts/jquery-1.2.1.js"> 
</script> 
<script type="text/javascript"> 
$(function(){ 
$('*').each(function(){ 
var current = this; 
this.onclick = function(event) { 
if (!event) event = window.event; 
var target = (event.target) ? 
event.target : event.srcElement; 
say('For ' + current.tagName + '#'+ current.id + 
' target is ' + target.id); 
} 
}); 
}); function say(text) { 
$('#console').append('<div>'+text+'</div>'); 
} 
</script> 
</head> 
<body id="greatgrandpa"> 
<div id="grandpa"> 
<div id="pops"> 
<img id="vstar" src="vstar.jpg"/> 
</div> 
</div> 
<div id="console"></div> 
</body> 
</html>

DOM第2级事件模型

DOM第0级的缺点是,属性被用于存储作为事件处理程序的函数的引用,所以每个元素对于任何特定的事件类型,每次只能注册一个事件处理程序。

DOM第2级事件模型(也称为监听器)被设计来解决这些类型的问题。每个DOM元素都定义名为addEventListener()的方法,用于把事件处理程序(监听器)附加到元素上。这个方法的格式如下所示:

addEventListener(enentType,listener,useCapture)

参数eventType是一个字符串,用于标识将要处理的时间类型。例如:click、mouseover、keydown等。

参数listener是函数的引用(或内联函数),用于在元素上建立指定类型的处理程序。

参数useCapture是布尔类型。

利用DOM第2级模型建立事件处理程序

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>DOM Level 2 Events Example</title> 
<script type="text/javascript" src="../scripts/jquery-1.2.1.js"> 
</script> 
<script type="text/javascript"> 
$(function(){ 
var element = $('#vstar')[0]; 
element.addEventListener('click',function(event) { 
say('Whee once!'); 
},false); 
element.addEventListener('click',function(event) { 
say('Whee twice!'); 
},false); 
element.addEventListener('click',function(event) { 
say('Whee three times!'); 
},false); 
}); function say(text) { 
$('#console').append('<div>'+text+'</div>'); 
} 
</script> 
</head> 
<body> 
<img id="vstar" src="vstar.jpg"/> 
<div id="console"></div> 
</body> 
</html>

以上代码简单说明我们能在同一个元素上为同一个事件类型建立多个事件处理程序
Javascript 相关文章推荐
javascript json 新手入门文档
Dec 03 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
延时加载JavaScript代码提高速度
Dec 27 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
一次Webpack配置文件的分离实战记录
Nov 30 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 Javascript
原生js实现表格翻页和跳转
Sep 29 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
jQuery学习3:操作元素属性和特性
Feb 07 #Javascript
jQuery学习2 选择器的使用说明
Feb 07 #Javascript
jQuery ctrl+Enter shift+Enter实现代码
Feb 07 #Javascript
JQuery 获取和设置Select选项的代码
Feb 07 #Javascript
经典海量jQuery插件 大家可以收藏一下
Feb 07 #Javascript
jQuery AnythingSlider滑动效果插件
Feb 07 #Javascript
javascript 函数速查表
Feb 07 #Javascript
You might like
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
php实现的mongodb操作类
2015/05/28 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
使用JS读秒使用示例
2013/09/21 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
Python如何实现邮件功能
2020/05/27 Python
python list的index()和find()的实现
2020/11/16 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
应聘教师自荐信
2013/10/12 职场文书
迟到检讨书300字
2014/02/14 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
微电影大赛策划方案
2014/06/05 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
工作简历的自我评价
2019/05/16 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android