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 相关文章推荐
jquery select选中的一个小问题
Oct 11 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
JavaScript中String.match()方法的使用详解
Jun 06 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
微信小程序 wx:for遍历循环使用实例解析
Sep 09 Javascript
js实现简易计算器小功能
Nov 18 Javascript
JavaScript异步操作中串行和并行
Nov 20 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
使用swoole扩展php websocket示例
2014/02/13 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
js控制frameSet示例
2013/09/10 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
python3.3实现乘法表示例
2014/02/07 Python
python随机生成指定长度密码的方法
2015/04/04 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
质检员岗位职责
2013/12/17 职场文书
学生自我鉴定模板
2013/12/30 职场文书
保密普查工作实施方案
2014/02/25 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
上海世博会口号
2014/06/19 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python