JavaScript(6)——事件1.0
---恢复内容开始---
事件
好不容易回到正轨,好好学习,天天向上。今天写的是事件,感觉内容蛮多的,所以分了两篇写,主要写了事件流、事件处理程序、事件对象。恩,明天还会再有一篇,哈哈哈。我努力的!我要去做老师布置的作业了,不然没有平时分,很惨的。
事件就是文档或浏览器窗口发生的一些特定的交互瞬间。
【事件流】
事件流描述的是从页面中接收事件的顺序。IE的事件流就就是事件冒泡流,而Nestcape开发团队的事件流是事件捕获流。
事件冒泡
IE的事件流叫事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点。
所有现代浏览器都支持事件冒泡,但在具体实现上还是有一些差别。
事件捕获
事件捕获的思想是不太具体的节点应该更早接收事件,而最具体的节点应该最后接收到事件。
事件捕获是Netscape Communicator 唯一支持的事件流模型。
DOM事件流
“DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。
在DOM事件流中,实际的目标(<div>元素)在捕获阶段不会接收到事件。
【事件处理程序】
事件就是用户或浏览器自身执行的某些动作。而响应某个事件的函数就叫做事件处理程序,事件处理程序的名字以“on”开头。
事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。
在HTML中指定事件处理程序有两个缺点:
一是存在一个时差问题。二是这样扩展事件处理程序的作用域链在不浏览器中会导致不同的结果。
DOM0级事件处理程序
使用DOM0级方法指定的事件处理程序被认为时候元素的方法。因此,这个时候的事件处理程序是在元素的作用域中运行。换句话说,程序中的this引用当前元素。如下:
var btn=document.getElementById("myBtn");
btn.onclick=function(){
alert("this.id"); //"myBtn"
};
也可以删除通过DOM0级方法指定的事件处理程序,只要将事件处理程序设置为null之后,再单击按钮将不会有任何动作发生。
DOM2级事件处理程序
定义了两个方法,用于处理指定(addEventListener())和删除(removeEventListener())事件处理程序的操作。都接受要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值的参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。如下:
var btn=document.getElementById("myBtn");
btn.addEventListener("click",function(){
alert(this.id);
},false);
IE事件处理程序
IE实现了与DOM中类似的两个方法:attachEvent()和detachEvent()。这两个方法接受相同的两个参数:事件处理程序名称和事件处理程序函数。通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。
var btn=document.getElementById("myBtn");
btn.attachEvent("onclick",function(){
alert("Clicked");
});
attachEvent()的第一个参数是"onclick",而且在IE中使用attachEvent()与使用DOM0级方法的主要区别在于事件处理程序的作用域。在DOM0 级方法情况下,事件处理程序会在其所属元素的作用域中运行;在使用attachEvent()方法的情况下,事件处理程序会在全局作用域中运行,因此this等于window。
【事件对象】
在触发DOM上的某一个事件时,会产生一个事件对象event,这个对象中包含所有与事件有关的信息。包括导致事件的元素、事件类型以及与其他特定事件相关的信息。
DOM0中的事件对象:兼容DOM的浏览器会将一个event对象传入到事件处理程序中。无论指定事件处理程序时使用什么方法,都会传入event对象。
IE中的事件对象:在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在。如果是通过HTML特性指定事件处理程序,那么还可以通过一个名叫event的变量来访问event对象(与DOM中的事件模型相同)。因为事件处理程序的作用域是根据它的方式来确定的,所以不能认为this会始终等于事件目标。所以,最好还是使用event.srcElement比较保险。
跨浏览器的事件对象:给EventUtil对象添加方法来实现获取对象的信息,getEvent()返回对event对象的引用;getTarget()方法用于返回事件的目标;preventDefault()方法用于取消事件的默认行为;stopPropagation()方法首先尝试使用DOM方法阻止事件流,否则就使用cancelBubble属性,由于IE不支持事件捕获,这个方法在跨浏览器情况下,也能用来阻止事件冒泡。
---恢复内容结束---
JavaScript(6)——事件1.0的更多相关文章
- jQuery $(document).ready()和JavaScript onload事件
jQuery $(document).ready()和JavaScript onload事件 Why we need a right time? 对元素的操作和事件的绑定需要等待一个合适的时机,可以看 ...
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- javascript通用事件封装
随着最近几年Html5的兴起,越来越多的应用采用html5进行实现,一个优秀的网页应用不但需要美观简洁的UI界面,更需要一个良好的交互.网页应用大部分的交互需要用javascript事件进行实现.虽然 ...
- JavaScript中事件绑定的方法总结
最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...
- JavaScript的事件监听、捕获和冒泡
在前端开发中,我们经常需要对某些事件进行监听.这样只要在指定的元素上触发了该事件,就会执行一个回调函数来进行相关的操作. 而JavaScript中事件监听的方法总共有三种,分别如下: element. ...
- javascript之事件绑定
曾经写过一篇随笔,attachEvent和addEventListener,跟本文内容有很多相似之处 本文链接:javascript之事件绑定 1.原始写法 <div onclick=" ...
- JavaScript键盘事件全面控制代码
JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head&g ...
- Javascript知识——事件
O(∩_∩)O~~又是新的一周开始了,今天还是在继续学习Javascript知识,今天主要讲了事件的知识.现在就总结下吧. 事件 事件一般是用于浏览器和用户操作进行交互.最早是 IE 和 Netsca ...
- 理解的javascript自定义事件
理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...
- 走进javascript——DOM事件
DOM事件模型 在0级DOM事件模型中,它只是简单的执行你为它绑定的事件,比如你为某个元素添加了一个onclick事件,当事件触发时,它只是去调用我们绑定的那个方法,不再做其他的操作. 在2级DOM事 ...
随机推荐
- eclipse 启动tomcat后 页面无法访问tomcat首页
在eclipse中新建tomcat7,完成后tomcat能够正常启动,但是浏览器问题localhost:8080访问不了. 解决方法如下: 双击eclipse中服务器中的tomcat 出现tomcat ...
- sql第二天
--基本格式 select * from tblclass --对于列进行限制 --格式一:取指定列 select cid,cname from TblClass select cname from ...
- 全局变量引起的BUG
花费3个小时解决了一个问题,时间比较长. 这次问题的原因是全局变量引起的,一个实例的函数用到了全局变量计算一个值,而全局变量的这个值会进行改变,所以在不同时期算出来的值是不一致的.而调用这个实例函数的 ...
- 万恶的tileMap
先吐槽下.. 本来,我们准备用tileMap来做地图的,但发现一个问题,就是tileMap层中不能添加cc.Sprite,这导致了tileMap只适合做2D平面没有遮挡的游戏,并且主角是不能有效率的进 ...
- HDU 2176 取(m堆)石子游戏 尼姆博弈
题目思路: 对于尼姆博弈我们知道:op=a[1]^a[2]--a[n],若op==0先手必败 一个简单的数学公式:若op=a^b 那么:op^b=a: 对于第i堆a[i],op^a[i]的值代表其余各 ...
- linux重要目录说明
1 home :root用户的home 目录是root,普通用户的home 目录是/home,users/(不要随便使用root权限,小白容易改错东西哒) 2 bin:常用可执行文件:/bin./us ...
- MySQL的备份和恢复
MySQL的备份和恢复 备份数据:mysqldump –uroot –p123456 dbname table [option] > dbname.sql mysqldump常用参数option ...
- java.util.Timer类似于闹钟定时做任务
在web中实现任务计划,相当于实现闹钟的功能,要完成2个步骤: 1.定时器的设置: 2.对这个定时器的启动运行和停止进行实时监听 java.util.Timer定时器,实际上是个线程,定时调度所拥有的 ...
- easyUI的treegrid列表添加查询
一些数据使用treegrid显示,添加筛选条件, 首先创建treegrid列表 var tree = $("#TreeGrid").treegrid({ url:"cha ...
- oracle之nomount、mount、open三种状态
1.先来看下外国网站上的资料怎么说 Nomount – The database instance has been started (processes and memory structures ...