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 相关文章推荐
js删除所有的cookie的代码
Nov 25 Javascript
基于Jquery的开发个代阴影的对话框效果代码
Jul 28 Javascript
jquery文字上下滚动的实现方法
Mar 22 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 Javascript
跟我学习JScript的Bug与内存管理
Nov 18 Javascript
购物车前端开发(jQuery和bootstrap3)
Aug 27 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
JS实现的随机排序功能算法示例
Jun 09 Javascript
Node.js搭建WEB服务器的示例代码
Aug 15 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 28 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字符串 ==比较运算符的副作用
2009/10/21 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
pyqt5自定义信号实例解析
2018/01/31 Python
python 不以科学计数法输出的方法
2018/07/16 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
大学生工作推荐信范文
2013/12/02 职场文书
留学推荐信怎么写
2014/01/25 职场文书
音乐专业自荐信
2014/02/07 职场文书
外贸专业求职信
2014/03/09 职场文书
电子信息工程自荐信
2014/05/26 职场文书
学校志愿者活动总结
2014/06/27 职场文书
小学班主任自我评价
2015/03/11 职场文书
总经理司机岗位职责
2015/04/10 职场文书
不同意离婚答辩状
2015/05/22 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
学生安全责任协议书
2016/03/22 职场文书
七年级作文之秋游
2019/10/21 职场文书
Python实现简单的猜单词
2021/06/15 Python