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 相关文章推荐
关于取不到由location.href提交而来的上级页面地址的解决办法
Jul 30 Javascript
jQuery 前的按键判断代码
Mar 19 Javascript
JS+css 图片自动缩放自适应大小
Aug 08 Javascript
JavaScript中指定函数名称的相关方法
Jun 04 Javascript
简单总结JavaScript中的String字符串类型
May 26 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
javascript阻止事件冒泡和浏览器的默认行为
Jan 21 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
vue注册组件的几种方式总结
Mar 08 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
Node.js中的cluster模块深入解读
Jun 11 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留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
php生成静态页面的简单示例
2014/04/17 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
Python坐标线性插值应用实现
2019/11/13 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
戴尔英国官网:Dell英国
2017/05/27 全球购物
学习党课思想汇报
2013/12/29 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
高中家长寄语
2014/04/02 职场文书
幼儿园运动会口号
2014/06/07 职场文书
教师三严三实心得体会
2014/10/11 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
企业2014年度工作总结
2014/12/10 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
解决Oracle数据库用户密码过期
2022/05/11 Oracle
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android