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 预解析
Oct 25 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
Apr 26 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
Nov 13 Javascript
jQuery级联操作绑定事件实例
Sep 02 Javascript
JS+DIV实现鼠标划过切换层效果的方法
May 25 Javascript
AngularJS Toaster使用详解
Feb 24 Javascript
浅析JS中常用类型转换及运算符表达式
Jul 23 Javascript
详解Require.js与Sea.js的区别
Aug 05 Javascript
在vue中安装使用vux的教程详解
Sep 16 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
Sep 27 Javascript
使用Vant完成通知栏Notify的提示操作
Nov 11 Javascript
vue+openlayers绘制省市边界线
Dec 24 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除数取整示例
2014/04/24 PHP
JavaScript中实现map功能代码分享
2015/06/11 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python异常和文件处理机制详解
2016/07/19 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
python字典操作实例详解
2017/11/16 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
Python语言快速上手学习方法
2018/12/14 Python
python字符串下标与切片及使用方法
2020/02/13 Python
python实现从ftp服务器下载文件
2020/03/03 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
护士检查书
2014/01/17 职场文书
学期自我评价
2014/01/27 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
面试通知邮件
2015/04/20 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书