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 相关文章推荐
PNG背景在不同浏览器下的应用
Jun 22 Javascript
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
TypeScript 中接口详解
Jun 19 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 Javascript
Bootstrap组件(一)之菜单
May 11 Javascript
Ionic如何创建APP项目
Jun 03 Javascript
js带闹铃功能的倒计时代码
Sep 29 Javascript
Express + Session 实现登录验证功能
Sep 08 Javascript
微信小程序实现单选选项卡切换效果
Jun 19 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 Javascript
JavaScript 声明私有变量的两种方式
Feb 05 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日期时间函数的高级应用技巧
2009/05/16 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
Python中用max()方法求最大值的介绍
2015/05/15 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python实现彩色图转换成灰度图
2019/01/15 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python创建文本文件的简单方法
2020/08/30 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
幼儿园安全责任书范本
2014/07/24 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
资料员岗位职责范本
2015/04/13 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android