JavaScript高级程序设计 阅读笔记(十七) js事件
发布时间:2024-04-19 09:55:17
一、事件流
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


猜你喜欢
- 相信用过Gmail的人都知道Gmail有一个草稿自动保存的功能,每过一段时间,Gmail都会自动保存邮件草稿,这样在一些突 * 况下就能快速地
- 在这篇文章中,将向您展示如何使用Python链接目前主流的MongoDB(V3.4.0)数据库,主要使用PyMongo(v3.4.0)和Mo
- 实例如下所:import osimport xlrdimport xlwtfrom xlutils.copy import copydef
- 最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论、线性代数、高数等等,这些大学学的我是忘得一干二净(我当时学的
- 一、简介说明:索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于
- Python 登录网站详解及实例对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看。这是因为 HTTP 协议是一个无状态
- 前言django是一个容易快速上手的web框架,用它来创建内容驱动型的网站(比如独立博客)十分方便。遗憾的是,django并没有提供官方的富
- Python字符串问题在arcpy中版本为 python2.x在QGIS中版本为 python2.x 或者 python3.xpython2
- 本文实例为大家分享了python字符串循环左移的具体代码,供大家参考,具体内容如下字符串循环左移给定一个字符串S[0…N-1],要求把S的前
- Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django 为这些数据库提
- 背景又很久没更新了,很幸运地新冠引发了严重的上呼吸道感染,大家羊过后注意休息和防护工作中(尤其是传统项目中)经常遇到这种需要,就是树形结构的
- 本文实例讲述了Python文件的读写操作。分享给大家供大家参考,具体如下:读写文件读取文件f = open('my_path/my_
- 在安装某个包的时候出现如下错误然后按照提示运行python -m pip install --upgrade pip并更新pip后再次运行p
- 感想我们在用jupyter notebook的时候,经常需要可视化一些东西,尤其是一些图像,我这里给个sample code环境opencv
- 继上一篇单向链表,单线链表可以进一步扩展为环,如下图所示:特点:1、第一个节点称为头部节点,最后一个节点称为尾部节点2、每个节点都单方面的指
- 在使用Python处理数据时,经常需要对数据筛选。这是在对时间筛选时,判断两列时间是否相差一年,如果是,则返回符合条件的所有列。data原始
- 关于什么是并发模型,我在这里引用 Go 语言联合创造者 Rob Pike 的一段话:并发是指一次处理多件事。并行是指一次做多件事。二者不同,
- json文件格式这是yolov4模型跑出来的检测结果result.json下面是截取的一张图的检测结果{ "frame_id&qu
- 目录前言🎪 一、Python 关键字🎢 二、Python标识符🎠 2.1 在 Python 中创建标识符的指南🎡 2.2 测试标识符是否有效
- excel 文件内容如下:读取excel内容:import xlrdfrom datetime import datetimefrom xl