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 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
JavaScript动态插入script的基本思路及实现函数
Nov 11 Javascript
js导出txt示例代码
Jan 14 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
星期几的不同脚本写法(推荐)
Jun 01 Javascript
浅析BootStrap Treeview的简单使用
Oct 12 Javascript
Bootstrap简单表单显示学习笔记
Nov 15 Javascript
一个例子轻松学会Vue.js
Jan 02 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
vue使用Google地图的实现示例代码
Dec 19 Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 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不写闭合标签的好处
2014/03/04 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
pandas重新生成索引的方法
2018/11/06 Python
对Python3 序列解包详解
2019/02/16 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
委托证明的格式
2014/01/10 职场文书
读书活动总结范文
2014/04/26 职场文书
动物科学专业求职信
2014/07/27 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
遗愿清单观后感
2015/06/09 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python