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中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
Jquery 动态生成表格示例代码
Dec 24 Javascript
js读取配置文件自写
Feb 11 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
Feb 28 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
Popup弹出框添加数据实现方法
Oct 27 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
Aug 22 Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 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正则走开
2008/03/15 PHP
php日历[测试通过]
2008/03/27 PHP
php 中文和编码判断代码
2010/05/16 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python字典,函数,全局变量代码解析
2017/12/18 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
selenium自动化测试入门实战
2020/12/21 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
入党综合考察材料
2014/06/02 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书