---恢复内容开始---

事件

好不容易回到正轨,好好学习,天天向上。今天写的是事件,感觉内容蛮多的,所以分了两篇写,主要写了事件流、事件处理程序、事件对象。恩,明天还会再有一篇,哈哈哈。我努力的!我要去做老师布置的作业了,不然没有平时分,很惨的。

事件就是文档或浏览器窗口发生的一些特定的交互瞬间。

【事件流】

事件流描述的是从页面中接收事件的顺序。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的更多相关文章

  1. jQuery $(document).ready()和JavaScript onload事件

    jQuery $(document).ready()和JavaScript onload事件 Why we need a right time? 对元素的操作和事件的绑定需要等待一个合适的时机,可以看 ...

  2. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  3. javascript通用事件封装

    随着最近几年Html5的兴起,越来越多的应用采用html5进行实现,一个优秀的网页应用不但需要美观简洁的UI界面,更需要一个良好的交互.网页应用大部分的交互需要用javascript事件进行实现.虽然 ...

  4. JavaScript中事件绑定的方法总结

    最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...

  5. JavaScript的事件监听、捕获和冒泡

    在前端开发中,我们经常需要对某些事件进行监听.这样只要在指定的元素上触发了该事件,就会执行一个回调函数来进行相关的操作. 而JavaScript中事件监听的方法总共有三种,分别如下: element. ...

  6. javascript之事件绑定

    曾经写过一篇随笔,attachEvent和addEventListener,跟本文内容有很多相似之处 本文链接:javascript之事件绑定 1.原始写法 <div onclick=" ...

  7. JavaScript键盘事件全面控制代码

    JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head&g ...

  8. Javascript知识——事件

    O(∩_∩)O~~又是新的一周开始了,今天还是在继续学习Javascript知识,今天主要讲了事件的知识.现在就总结下吧. 事件 事件一般是用于浏览器和用户操作进行交互.最早是 IE 和 Netsca ...

  9. 理解的javascript自定义事件

    理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...

  10. 走进javascript——DOM事件

    DOM事件模型 在0级DOM事件模型中,它只是简单的执行你为它绑定的事件,比如你为某个元素添加了一个onclick事件,当事件触发时,它只是去调用我们绑定的那个方法,不再做其他的操作. 在2级DOM事 ...

随机推荐

  1. <hdu - 3999> The order of a Tree 水题 之 二叉搜索的数的先序输出

    这里是杭电hdu上的链接:http://acm.hdu.edu.cn/showproblem.php?pid=3999  Problem Description: As we know,the sha ...

  2. springmvc集成aop记录操作日志

    首先说明一下,这篇文章只做了记录日志相关事宜 具体springmvc如何集成配置aop对cotroller进行拦截,请看作者的另一篇文章 http://www.cnblogs.com/guokai87 ...

  3. Java基础之异常

    1.异常的概念 异常:程序在运行时出现的不正常情况,也可以说是出现的问题: Java中的异常:出现的不正常的问题也是一类事物,这类事物有一些共性的东西,比如有名称,有产生的原因等,将这些共性的部分抽取 ...

  4. scala实现快速排序

    scala> def qSort(a: List[Int]): List[Int] = { | ) a | else qSort( a.filter(a.head > _ )) ++ | ...

  5. OpenCV程序在Debug时出现「PDB文件无法加载」的一个解决方法

    这几天毕设要用到OpenCV,按照网上的教程来搭建开发环境. 用的是OpenCV 3.0 beta + Visual Studio Community 2013.我的系统64位是Win 8.1,但在加 ...

  6. mysql count max min 语句用法

    count 用法 求总条数 $sql="select count(*) as total from e_user"; $query = mysql_query($sql, $lin ...

  7. js的日期、定时器

    第一.js的日期 js的日期是用内置对象Date来操作,首先先创建一个日期 var date=new Date();,然后就可以调用它的API来获取年月日.时分秒等等,这不是本文重点,本文重点讲如何把 ...

  8. OBIEE 12C

    OBIEE 12C安装配置 oracle官网下载BIEE12C 在虚拟机上安装 linux 在SQLPLUS启动和停止Oracle数据库 重启oracle数据库 cmd->1.lsnrctl s ...

  9. NPM使用介绍

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用 允许用户NPM服务器下载并安装别 ...

  10. magento删除数据

    1.删除一条数据:    $delete = Mage::getSingleton("core/resource")->getConnection("core_wr ...