JavaScript高级程序设计 阅读笔记(十七) js事件


Posted in Javascript onAugust 14, 2012

一、事件流

IE中是冒泡型事件,即从最特定的事件目标到最不特定的事件目标。

Netscape Navigator使用的是捕获型事件,这个跟IE中采用的冒泡型事件相反。

DOM事件流同时支持两种事件模型,但捕获型事件先发生。

二、事件处理函数/监听函数

事件是用户或浏览器自身进行的特定行为。这些事件都有自己的名字,如click、load、mouseover等。

事件处理函数有两种分配方式:在JavaScript中或者在HTML中。

如果在JavaScript中分配事件处理函数,则首先要获得要处理的对象的引用,然后将函数赋值给对应的事件处理函数属性,像这样(事件处理函数名称必须小写):

var oDiv=document.getElementById("div1"); 
oDiv.onclick=function(){ 
alert("I was clicked"); 
}

如果在HTML中分配事件处理函数,则只要在HTML标签中添加事件处理函数的特征,并在其中包含合适的脚本作为特性值就可以了,如下:

<div onclick="alert('I was clicked')"></div>

为了给每个可用事件分配多个事件处理函数,IE和DOM各提供了自己的方法。

IE中每个元素和window对象都有两个方法:attachEvent()和detachEvent(),顾名思义,前者用来给一个事件附加事件处理函数,后者用来将事件处理函数分离出来。每个方法都有两个参数:要分配的事件处理函数名字及一个函数。如:

var fnClick=function(){ 
alert("Clicked"); 
} 
var fnClick2=function(){ 
alert("Click2"); 
} 
var oDiv=document.getElementById("div"); 
oDiv.attachEvent("onclick",fnClick); 
oDiv.attachEvent("onclick",fnClick2) 
oDiv.detachEvent("onclick",fnClick); 
oDiv.detachEvent("onclick",fnClick2);

DOM中采用了addEventListener()和removeEventListener()来分配和移除事件处理函数。与IE不同的是这些方法有三个参数,第三个参数标识是用于冒泡阶段还是捕获阶段。用于捕获阶段为true,用于冒泡阶段则为false。移除时第三个参数要跟添加时保持一致。如:
var fnClick=function(){ 
alert("Clicked"); 
} 
var fnClick2=function(){ 
alert("Click2"); 
} 
var oDiv=document.getElementById("div"); 
oDiv.addEventListener("onclick",fnClick,false); 
oDiv.addEventListener("onclick",fnClick2,false) 
oDiv.removeEventListener("onclick",fnClick,false); 
oDiv.removeEventListener("onclick",fnClick2,false);

三、事件对象

事件对象一般包含的信息是:引起事件的对象,事件发生时鼠标的信息,事件发生时键盘的信息。
定位

IE中事件对象是window对象的一个属性event。事件处理函数必须这样访问事件对象:

oDiv.onclick = function(){ 
var oEvent=window.event; 
}

DOM标准则说,event对象必须作为唯一的参数传递给事件处理函数。所以,在DOM兼容的浏览器(如Mozilla、Safair、Opera)中访问事件对象为:
oDiv.onclick=function(){ 
var oEvent=arguments[0]; 
} 
//or 
oDiv.onclick=function(oEvent){ 
}

属性方法相似性

1、获取事件类型:oEvent.type

2、获取按键代码:oEvent.keyCode

3、检测Shift、Alt、Ctrl键:oEvent.shiftKey;oEvent.altKey;oEvent.ctrlKey;

4、获取客户端鼠标坐标:oEvent.clientX;oEvent.clientY;

5、获取屏幕坐标:oEvent.screenX;oEvent.screenY;

属性方法区别

1、获取目标:IE用srcElement,DOM用target;

2、获取按键字符代码:IE用keyCode,DOM用charCode和String.fromCharCode;

3、阻止某个事件的默认行为:IE用oEvent.returnValue=false,DOM用preventDefault()方法;

4、停止事件冒泡:IE中用oEvent.cancelBubble=true;DOM中用oEvent.stopPropagation();

四、事件的类型

1、鼠标事件

鼠标事件包含click、dblclick、mousedown、mouseout、mouseover、mouseup、mousemove。

事件顺序:dblclick事件会先后触发以下事件:mousedown、mouseup、click、mousedown、mouseup、click、dblclick。

2、键盘事件

键盘事件包括:keydown、keypress、keyup。

事件顺序:用户按一次某字符按键时,会先后触发以下事件:keydown、keypress、keyup。如果按一次某非字符按键时,会先后触发以下事件:keydown、keyup。

3、HTML事件

HTML事件包括:load、unload、abort、error、select、change、submit、reset、resize、scroll、focus、blur。

4、变化事件

虽然变化事件已经是DOM标准的一部分,但是目前还没有任何主流的浏览器实现了它。因此这里只是列举出来。

变化事件包括:DOMSubtreeModified、DOMNodeInserted、DOMNodeRemoved、DOMNodeRemovedFromDocument、DOMNodeInsteredIntoDocument。

作者:Artwl
出处:http://artwl.cnblogs.com

Javascript 相关文章推荐
JS与框架页的操作代码
Jan 17 Javascript
JavaScript常用全局属性与方法记录积累
Jul 03 Javascript
理解jQuery stop()方法
Nov 21 Javascript
jQuery+CSS3实现3D立方体旋转效果
Nov 10 Javascript
JS截取字符串实例详解
Nov 24 Javascript
jstree的简单实例
Dec 01 Javascript
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
Vue2.0学习之详解Vue 组件及父子组件通信
Dec 12 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
React SSR样式及SEO的实践
Oct 22 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 #Javascript
jQuery 1.8 Release版本发布了
Aug 14 #Javascript
常用一些Javascript判断函数
Aug 14 #Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 #Javascript
You might like
php设计模式 Proxy (代理模式)
2011/06/26 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
java解析json方法总结
2019/05/16 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
layui使用label标签的方法
2019/09/14 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
python 快速排序代码
2009/11/23 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
python 字符串常用函数详解
2019/09/11 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
python中turtle库的简单使用教程
2020/11/11 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
加热夹克:RAVEAN
2018/10/19 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
九年级科学教学反思
2014/01/29 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书