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截取函数(indexOf,join等)
Sep 01 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
js 用于检测类数组对象的函数方法
May 02 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
May 30 Javascript
JS设计模式之惰性模式(二)
Sep 29 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
Sep 26 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
Smarty3配置及入门语法
2017/02/22 PHP
php修改数组键名的方法示例
2017/04/15 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
js实现漫天星星效果
2017/01/19 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
解决Python一行输出不显示的问题
2018/12/03 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
学python最电脑配置有要求么
2020/07/05 Python
python实现计算图形面积
2021/02/22 Python
使用python实现学生信息管理系统
2021/02/25 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
学生党员一帮一活动总结
2014/07/08 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
失恋33天观后感
2015/06/11 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python