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下查找父节点的简单方法
Aug 13 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
Node.js实现的简易网页抓取功能示例
Dec 05 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
Aug 25 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
深入理解Promise.all
Aug 08 Javascript
微信小程序仿今日头条导航栏滚动解析
Aug 20 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
Jul 27 Javascript
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正则
2006/07/07 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
javascript简易画板开发
2020/04/12 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
Vue的Options用法说明
2020/08/14 Javascript
Python+Opencv识别两张相似图片
2020/03/23 Python
深入理解python对json的操作总结
2017/01/05 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Django之PopUp的具体实现方法
2019/08/31 Python
Django模板语言 Tags使用详解
2019/09/09 Python
python 实现的车牌识别项目
2021/01/25 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
幼儿园中班开学寄语
2014/04/03 职场文书
美术学专业求职信
2014/07/23 职场文书
大学生实习推荐信
2015/03/27 职场文书
爱心捐书倡议书
2015/04/27 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL