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 相关文章推荐
超清晰的document对象详解
Feb 27 Javascript
javascript 写类方式之二
Jul 05 Javascript
jquery ajax 同步异步的执行示例代码
Jun 23 Javascript
ExpressJS入门实例
Jan 14 Javascript
简介JavaScript中strike()方法的使用
Jun 08 Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
深入理解React高阶组件
Sep 28 Javascript
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
AJAX架构之Dojo篇
2007/04/10 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
SVG实现时钟效果
2018/07/17 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
python爬虫使用cookie登录详解
2017/12/27 Python
django解决跨域请求的问题
2018/11/11 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
Python实战之制作天气查询软件
2019/05/14 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
大学生实习感言
2014/01/16 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
民事辩护词范文
2015/05/21 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
Python学习之迭代器详解
2022/04/01 Python