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截取函数(indexOf,join等)
Sep 01 Javascript
JS自动缩小超出大小的图片
Oct 12 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
Oct 29 Javascript
jQuery学习笔记之2个小技巧
Jan 19 Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 Javascript
jquery Validation表单验证使用详解
Sep 12 Javascript
javascript中加var和不加var的区别 你真的懂吗
Jan 06 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
详解 vue better-scroll滚动插件排坑
Feb 08 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 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中正确的使用json
2013/08/06 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
vue实现图片上传功能
2020/05/28 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
Python制作Windows系统服务
2017/03/25 Python
python实现的config文件读写功能示例
2019/09/24 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
公休请假条
2014/04/11 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
教学督导岗位职责
2015/04/10 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
保外就医申请书范文
2015/08/06 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技